Pregunta

Estoy atascado en la conversión de un objeto DateTime a una marca de tiempo para el formato de archivo de captura libpcap (también es utilizado por wireshark, definición de formato de archivo ) en C #. La marca de tiempo a la que no puedo convertir mi objeto es la Marca de tiempo en el encabezado del paquete (registro) (guint32 ts_sec y guint32 ts_usec).

¿Fue útil?

Solución

Puedes hacerlo así:

DateTime dateToConvert = DateTime.Now;
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan diff = date - origin;

// Seconds since 1970
uint ts_sec = Math.Floor(diff.TotalSeconds);
// Microsecond offset
uint ts_usec = 1000000 * (diff.TotalSeconds - ts_sec);

Otros consejos

Es mejor convertir el Unix Epoch y su dateToConvert a UTC antes de cualquier manipulación. Hay un constructor para DateTime que toma DateTimeKind para construir UnixEpoch, y hay un método ToUniversalTime () para dateToConvert. Si siempre desea Now, hay una práctica propiedad DateTime.UtcNow que se ocupa de eso por usted. El código tal como está escrito no debería tener ningún problema, pero si hace de esto una función, se podría pasar una fecha UTC y trabajar con una fecha objetivo UTC y una Epoch local de Unix ciertamente no daría los resultados correctos a menos que esté en GMT y no en verano.

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