Domanda

Sto facendo un programma in cui ho bisogno di ottenere il tempo in millisecondi. Con il tempo, voglio dire un numero che non è mai uguale a se stesso, ed è sempre 1000 numeri più grandi di quanto non fosse un secondo fa. Ho provato a convertire DateTime.Now ad un TimeSpan e ottenere il TotalMilliseconds da quello ... ma ho sentito che non è perfettamente preciso.

C'è un modo più semplice per fare questo?

È stato utile?

Soluzione

Utilizza la classe Stopwatch .

  

Fornisce un insieme di metodi e   le proprietà che è possibile utilizzare per   misurare con precisione il tempo trascorso.

Ci sono alcune buone informazioni attuazione qui:

test delle prestazioni: Precise Misure tempo di esecuzione con System.Diagnostics.Stopwatch

Altri suggerimenti

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

Questo è in realtà come i vari metodi di conversione di Unix sono implementati nel DateTimeOffset classe (NET Framework 4.6+, .NET standard 1.3 +):

long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();

La proprietà DateTime.Ticks ottiene il numero di zecche che rappresentano la data e l'ora.

10.000 zecche è un millesimo di secondo (10.000.000 tick per secondo).

È possibile provare il metodo nativo QueryPerformanceCounter. Vedere http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter .html per ulteriori informazioni. Questo è ciò che gli usi di classe Stopwatch.

Come ottenere timestamp di precisione tick in .NET / C #? per ulteriori informazioni.

Stopwatch.GetTimestamp() dà accesso a questo metodo:

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

Io uso la seguente classe. L'ho trovato su internet, una volta, ritiene che sia il migliore 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); } }
}

Origine sconosciuta.

ho usato DateTime.Now.TimeOfDay.TotalMilliseconds (per il giorno corrente), spero che ti aiuta pure.

Usa System.DateTime.Now.ToUniversalTime(). Che mette la vostra lettura in un noto formato di millisecondo di riferimento-based che elimina totalmente il cambiamento giorno, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top