Obtenga DateTime.Now con precisión de milisegundos

Resuelto LuckyHK asked hace 11 años • 0 respuestas

¿Cómo puedo construir exactamente una marca de tiempo de la hora real con una precisión de milisegundos?

Necesito algo como 16.4.2013 9:48:00:123. es posible? Tengo una aplicación en la que tomo muestras de valores 10 veces por segundo y necesito mostrarlos en un gráfico.

LuckyHK avatar Apr 16 '13 15:04 LuckyHK
Aceptado

¿Cómo puedo construir exactamente una marca de tiempo de la hora real con una precisión de milisegundos?

Sospecho que te refieres a una precisión de milisegundos . DateTimeTiene mucha precisión, pero es bastante tosco en términos de exactitud. En términos generales, no se puede. Por lo general, el reloj del sistema (que es de donde DateTime.Nowobtiene los datos) tiene una resolución de alrededor de 10 a 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 necesite una precisión de milisegundos aquí. Si no le importa la sincronización exacta , 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 recomendaría que lo use DateTime.UtcNowen lugar de DateTime.Nowhacerlo para evitar problemas de zona horaria en torno a las transiciones de horario de verano, etc.

Si su pregunta en realidad gira en torno a convertir a DateTimeen una cadena con precisión de milisegundos, le sugiero usar:

string timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff",
                                            CultureInfo.InvariantCulture);

(Tenga en cuenta que, a diferencia de su muestra, esto se puede ordenar y es menos probable que cause confusión sobre si debe ser "mes/día/año" o "día/mes/año").

Jon Skeet avatar Apr 16 '2013 08:04 Jon Skeet

Esto debería funcionar:

DateTime.Now.ToString("hh.mm.ss.ffffff");

Si no necesita que se muestre y solo necesita saber la diferencia horaria, no lo convierta en una cadena. Déjalo como,DateTime.Now();

Y utilízalo TimeSpanpara conocer la diferencia entre intervalos de tiempo:

Ejemplo

DateTime start;
TimeSpan time;

start = DateTime.Now;

//Do something here

time = DateTime.Now - start;
label1.Text = String.Format("{0}.{1}", time.Seconds, time.Milliseconds.ToString().PadLeft(3, '0'));
Pyromancer avatar Apr 16 '2013 08:04 Pyromancer

Estaba buscando una solución similar, basándome en lo sugerido en este hilo, uso lo siguiente DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff") y funciona de maravilla. Nota: esos .fffson los números de precisión que desea capturar.

Jozcar avatar Jan 05 '2017 17:01 Jozcar