Pregunta

Estoy haciendo un programa en el que necesito para obtener el tiempo en milisegundos. Con el tiempo, me refiero a un número que no es nunca igual a sí mismo, y siempre es 1000 números más grandes de lo que era hace un segundo. He intentado convertir a un DateTime.Now TimeSpan y conseguir el TotalMilliseconds de eso ... pero he oído que no es perfectamente preciso.

¿Hay una manera más fácil de hacer esto?

¿Fue útil?

Solución

El uso del href="http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx" rel="noreferrer"> Stopwatch clase

  

Proporciona un conjunto de métodos y   propiedades que se pueden utilizar para   medir con precisión el tiempo transcurrido.

Hay algo de información sobre la implementación de buenas aquí:

Pruebas de rendimiento: Las mediciones precisas de tiempo de ejecución con System.Diagnostics.Stopwatch

Otros consejos

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

Esto es realmente cómo se implementan los diferentes métodos de conversión Unix en el DateTimeOffset clase (.NET Framework 4.6+, .NET estándar 1.3 +):

long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();

La propiedad DateTime.Ticks obtiene el número de garrapatas que representan la fecha y la hora.

10.000 garrapatas es un milisegundo (10.000.000 ticks por segundo).

Se puede probar el método nativo QueryPerformanceCounter. Ver http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter .html para más información. Esto es lo que los usos de la clase Stopwatch.

Como llegar marca de tiempo de precisión 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;
     }
 }

Yo uso la siguiente clase. Lo encontré en Internet una vez, postulado que es la mejor 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); } }
}

Fuente desconocida.

utiliza DateTime.Now.TimeOfDay.TotalMilliseconds (para el día actual), espero que le ayuda a salir también.

Uso System.DateTime.Now.ToUniversalTime(). Eso hace que su lectura en un formato basado en milisegundos referencia conocida que elimina totalmente el cambio día, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top