Ottenere il tempo in millisecondi utilizzando C #
-
26-09-2019 - |
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?
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.