web-dev-qa-db-ja.com

C#を使用してミリ秒単位で時間を取得する

ミリ秒単位で時間を取得する必要があるプログラムを作成しています。時間が経つにつれて、私は決してそれ自体と等しくなることのない数を意味し、1秒前よりも常に1000の数だけ大きくなります。 DateTime.NowTimeSpanに変換して、そこからTotalMillisecondsを取得しようとしましたが、完全に正確ではないと聞きました。

これを行う簡単な方法はありますか?

107
Entity

Stopwatch クラスを使用します。

経過時間を正確に測定するために使用できる一連のメソッドとプロパティを提供します。

ここに実装するための良い情報があります:

パフォーマンステスト:System.Diagnostics.Stopwatchを使用した正確なランタイム測定

74
RedFilter
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

これは、実際にさまざまなUnix変換メソッドが DateTimeOffset クラス(.NET Framework 4.6 + 、. NET Standard 1.3+)で実装される方法です。

long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
269
Evan Mulawski

DateTime.Ticksプロパティは、日付と時刻を表すティックの数を取得します。

10,000ティックはミリ秒(1秒あたり10,000,000ティック)です。

13
Itay Karo

QueryPerformanceCounterネイティブメソッドを試すことができます。詳細については、 http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter.html を参照してください。これはStopwatchクラスが使用するものです。

詳細については、「 。NET/C#でティック精度のタイムスタンプを取得する方法 」を参照してください。

Stopwatch.GetTimestamp()は、このメソッドへのアクセスを提供します。

public static long GetTimestamp() {
     if(IsHighResolution) {
         long timestamp = 0;
         SafeNativeMethods.QueryPerformanceCounter(out timestamp);
         return timestamp;
     }
     else {
         return DateTime.UtcNow.Ticks;
     }
 }
8

私は次のクラスを使用します。私は一度インターネットでそれを見つけ、最高だと仮定しましたNOW()

/// <summary>Class to get current timestamp with enough precision</summary>
static class CurrentMillis
{
    private static readonly DateTime Jan1St1970 = new DateTime (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    /// <summary>Get extra long current timestamp</summary>
    public static long Millis { get { return (long)((DateTime.UtcNow - Jan1St1970).TotalMilliseconds); } }
}

ソースが不明です。

7
schmijos

DateTime.Now.TimeOfDay.TotalMilliseconds(現在の日)を使用しましたが、それがあなたにも役立つことを願っています。

5
Sarvan

System.DateTime.Now.ToUniversalTime()を使用します。これにより、読み取りは既知の参照ベースのミリ秒形式になり、曜日の変更などが完全になくなります。

1
John Tobler