152

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

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

4

10 に答える 10

393
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

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

long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
于 2010-10-25T16:07:04.560 に答える
81

Stopwatchクラスを使用します。

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

ここに実装に関する良い情報があります:

パフォーマンス テスト: System.Diagnostics.Stopwatch による正確な実行時間の測定

于 2010-10-25T16:05:37.837 に答える
16

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

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

于 2010-10-25T16:05:24.600 に答える
12

私は次のクラスを使用します。インターネットで一度見つけたのですが、最高の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); } }
}

ソース不明。

于 2013-02-24T12:59:00.587 に答える
8

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;
     }
 }
于 2010-10-25T16:06:32.157 に答える
5

私は DateTime.Now.TimeOfDay.TotalMilliseconds (当日) を使用しました。

于 2012-08-17T09:57:00.287 に答える
2

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

于 2012-09-17T17:07:45.107 に答える
0

あなたの要件を理解しているように、Environment.TickCountは法案に適合しています。起動からのミリ秒数を返すため、常に増加し、ミリ秒単位の経過時間の計算に使用できます。絶対時間も必要な場合は、現在の時間と現在の Environment.TickCount を取得し、それと新しい Environment.TickCount に基づいて新しい絶対時間を計算できます。

于 2021-09-05T13:52:06.680 に答える