Obtenga DateTime.Now con precisión de milisegundos
¿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.
¿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 . DateTime
Tiene 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.Now
obtiene 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.UtcNow
en lugar de DateTime.Now
hacerlo 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 DateTime
en 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").
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 TimeSpan
para 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'));
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 .fff
son los números de precisión que desea capturar.