watcher - Obtenga tiempo en milisegundos usando C#
time elapsed c# (7)
La propiedad DateTime.Ticks
obtiene el número de ticks que representan la fecha y la hora.
10,000 Ticks es un milisegundo (10,000,000 de tics por segundo).
Estoy haciendo un programa en el que necesito obtener el tiempo en milisegundos. Por tiempo, me refiero a un número que nunca es igual a sí mismo, y siempre es 1000 números más grande que hace un segundo. Intenté convertir DateTime.Now
en TimeSpan
y obtener TotalMilliseconds
de eso ... pero he oído que no es perfectamente exacto.
¿Hay alguna forma más fácil de hacer esto?
Puede probar el método nativo QueryPerformanceCounter
. Consulte http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter.html para obtener más información. Esto es lo que usa la clase Stopwatch
.
Consulte ¿Cómo obtener la marca de tiempo de la precisión de la marca en .NET / C #? para más información.
Stopwatch.GetTimestamp()
da acceso a este método:
public static long GetTimestamp() {
if(IsHighResolution) {
long timestamp = 0;
SafeNativeMethods.QueryPerformanceCounter(out timestamp);
return timestamp;
}
else {
return DateTime.UtcNow.Ticks;
}
}
Usé DateTime.Now.TimeOfDay.TotalMilliseconds (para el día actual), espero que te ayude también.
Usa la clase Stopwatch
.
Proporciona un conjunto de métodos y propiedades que puede usar para medir con precisión el tiempo transcurrido.
Hay alguna buena información sobre cómo implementarlo aquí:
Pruebas de rendimiento: mediciones de tiempo de ejecución precisas con System.Diagnostics.Stopwatch
Use System.DateTime.Now.ToUniversalTime()
. Eso pone su lectura en un conocido formato de milisegundos basado en referencias que elimina por completo el cambio de día, etc.
Yo uso la siguiente clase. Lo encontré en Internet una vez, postulado para ser el mejor AHORA () .
/// <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); } }
}
Fuente desconocida.
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
De hecho, así es como se implementan varios métodos de conversión de Unix en la clase DateTimeOffset
(.NET Framework 4.6+, .NET Standard 1.3+):
long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();