yyyymmddhhmmssfff write with now ddmmyyyyhhmmss c# datetime precision milliseconds

c# - write - Obtenga DateTime.Now con milisegundos de precisión



datetime to milliseconds c# (10)

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

Sospecho que te refieres a la precisión en milisegundos. DateTime tiene mucha precisión, pero es bastante grosero en términos de precisión. En general, no puedes. Por lo general, el reloj del sistema (que es de donde DateTime.Now obtiene sus datos) tiene una resolución de alrededor de 10-15 ms. Vea la publicación del blog de Eric Lippert sobre precisión y precisión para más detalles.

Si necesita un tiempo más preciso que esto, 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 el momento exacto , solo quiere mostrar las muestras en el orden correcto, con una precisión "bastante buena", entonces el reloj del sistema debería estar bien. Sin embargo, le aconsejo que use DateTime.UtcNow lugar de DateTime.Now , para evitar problemas de zona horaria en las transiciones de horario de verano, etc.

Si su pregunta se trata de convertir un DateTime a una cadena con una precisión de milisegundos, le sugiero que use:

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

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

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

Necesito algo así como 16.4.2013 9: 48: 00: 123. es posible? Tengo una aplicación, donde muestreo valores 10 veces por segundo, y necesito mostrarlos en un gráfico.


DateTime.Now.ToString ("ddMMyyyyhhmmssffff")


El problema con DateTime.UtcNow y DateTime.Now es que, dependiendo de la computadora y el sistema operativo, solo 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 microsegundo, consulte la función GetTimeStamp() continuación.

[System.Security.SuppressUnmanagedCodeSecurity, System.Runtime.InteropServices.DllImport("kernel32.dll")] static extern void GetSystemTimePreciseAsFileTime(out FileTime pFileTime); [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)] public struct FileTime { public const long FILETIME_TO_DATETIMETICKS = 504911232000000000; // 146097 = days in 400 year Gregorian calendar cycle. 504911232000000000 = 4 * 146097 * 86400 * 1E7 public uint TimeLow; // least significant digits public uint TimeHigh; // most sifnificant digits public long TimeStamp_FileTimeTicks { get { return TimeHigh * 4294967296 + TimeLow; } } // ticks since 1-Jan-1601 (1 tick = 100 nanosecs). 4294967296 = 2^32 public DateTime dateTime { get { return new DateTime(TimeStamp_FileTimeTicks + FILETIME_TO_DATETIMETICKS); } } } public static DateTime GetTimeStamp() { FileTime ft; GetSystemTimePreciseAsFileTime(out ft); return ft.dateTime; }


Estaba buscando una solución similar, basada en lo que se sugirió en este hilo, utilizo el siguiente DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff") , y funciona como encanto. Nota: los .fff son los números de precisión que desea capturar.


Esto debería funcionar:

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

Si no necesita que se muestre y solo necesita saber la diferencia de tiempo, no lo convierta en una Cadena. Solo déjalo como, DateTime.Now();

Y use TimeSpan para conocer la diferencia entre los 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''));


Por lo que entiendo la pregunta, puedes ir por:

DateTime dateTime = DateTime.Now; DateTime dateTimeInMilliseconds = dateTime.AddTicks(-1 * dateTime.Ticks % 10000);

Esto cortará garrapatas de menos de 1 milisegundo.


Si aún desea una fecha en lugar de una cadena como las otras respuestas, simplemente agregue este método de extensión.

public static DateTime ToMillisecondPrecision(this DateTime d) { return new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second, d.Millisecond, d.Kind); }


Utilice DateTime Structure con milisegundos y formatee de esta manera:

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


La respuesta de Pyromancer me parece bastante buena, pero tal vez querías:

DateTime.Now.Millisecond

Pero si está comparando fechas, TimeSpan es el camino a seguir.


public long millis() { return (long.MaxValue + DateTime.Now.ToBinary()) / 10000; }

Si quiere microsegundos, simplemente cambie 10000 a 10 , y si quiere el décimo de micro, elimine / 10000 .