¿Cómo puedo construir exactamente una marca de tiempo del tiempo real con precisión de milisegundos?
Necesito algo como 16.4.2013 9: 48: 00: 123. es posible? Tengo una aplicación, donde muestro valores 10 veces por segundo, y necesito mostrarlos en un gráfico.
c#
datetime
precision
milliseconds
LuckyHK
fuente
fuente
hh
durante horas (hora estándar). En el caso de una marca de tiempo (y en muchos otros casos), esto probablemente debería emparejarse contt
(am / pm) o reemplazarse porHH
(hora militar).Respuestas:
Sospecho que te refieres a la precisión de milisegundos .
DateTime
tiene mucha precisión, pero es bastante tosco en términos de precisión. En general, no puedes. Por lo general, el reloj del sistema (que es de dondeDateTime.Now
obtiene sus datos) tiene una resolución de alrededor de 10-15 ms. Consulte la publicación del blog de Eric Lippert sobre precisión y exactitud para obtener más detalles.Si necesita una sincronización más precisa que esta, es posible que desee considerar el uso de un cliente NTP.
Sin embargo, no está claro que realmente necesites una precisión de milisegundos aquí. Si no le importa el momento exacto , solo desea mostrar las muestras en el orden correcto, con una precisión "bastante buena", entonces el reloj del sistema debería estar bien. Le aconsejaría que use en
DateTime.UtcNow
lugar de hacerloDateTime.Now
, para evitar problemas de zona horaria alrededor de las transiciones de horario de verano, etc.Si su pregunta es en realidad acerca de convertir un
DateTime
a una cadena con precisión de milisegundos, sugiero usar:(Tenga en cuenta que, a diferencia de su muestra, esto es ordenable y es menos probable que cause confusión sobre si debe ser "mes / día / año" o "día / mes / año").
fuente
DateTime.UtcNow
repetidamente, ¿solo aumenta una vez por segundo? No lo has demostrado.)Esto debería funcionar:
Si no necesita que se muestre y solo necesita saber la diferencia horaria, no lo convierta en una cadena. Solo déjalo como,
DateTime.Now();
Y usa
TimeSpan
para saber la diferencia entre los intervalos de tiempo:Ejemplo
fuente
Estaba buscando una solución similar, basada en lo sugerido en este hilo, utilizo lo siguiente
DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff")
y funciona a la perfección. Nota: esos.fff
son los números de precisión que desea capturar.fuente
HH
(tiempo militar) o agreguett
(PM o AM). Como se muestra en este ejemplo: repl.it/KGr3/1Use la estructura DateTime con milisegundos y un formato como este:
fuente
La respuesta de Pyromancer me parece bastante buena, pero tal vez querías:
Pero si está comparando fechas, TimeSpan es el camino a seguir.
fuente
TotalMilliseconds
. Milisegundos contiene el contador actual de Milisegundos, que nunca es mayor que 1000, mientras que TotalMilliseconds contiene el total de milisegundos transcurridos desde la época.Si aún desea una fecha en lugar de una cadena como las otras respuestas, simplemente agregue este método de extensión.
fuente
Hasta donde entiendo la pregunta, puedes ir por:
Esto cortará las garrapatas de menos de 1 milisegundo.
fuente
El problema con
DateTime.UtcNow
yDateTime.Now
es que, dependiendo de la computadora y el sistema operativo, puede ser preciso entre 10 y 15 milisegundos. Sin embargo, en las computadoras con Windows se puede usar la función de bajo nivel GetSystemTimePreciseAsFileTime para obtener una precisión de microsegundos, consulte la función aGetTimeStamp()
continuación.fuente
intente usar datetime.now.ticks. Esto proporciona precisión de nanosegundos. tomar el delta de dos ticks (stoptick - starttick) / 10,000 es el milisegundo del intervalo especificado.
https://docs.microsoft.com/en-us/dotnet/api/system.datetime.ticks?view=netframework-4.7.2
fuente
Si desea microsegundos, simplemente cambie
10000
a10
, y si desea el décimo de micro, elimine/ 10000
.fuente
DateTime.Now.ToString ("ddMMyyyyhhmmssffff")
fuente