Necesito convertir un DateTime en una marca de tiempo Unix. Así que googled que buscar un código de ejemplo¿Por qué el uso de DateTime en Unix utiliza un doble en lugar de un número entero?
En casi todos los resultados que veo, que utilizan double
como el cambio de una función de este tipo, incluso cuando explícitamente mediante floor
para convertirlo en un entero. Las marcas de tiempo de Unix son siempre enteros. Entonces, ¿qué problema hay con el uso de long
o int
en lugar del doble?
static double ConvertToUnixTimestamp(DateTime date)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan diff = date - origin;
return Math.Floor(diff.TotalSeconds);
}
mi humilde opinión no para validar la fecha de entrada. Debería devolver una estructura larga o una estructura ad-hoc – onof
No hay ninguna razón, solo es un código sórdido. Emitido a largo, no puede desbordarse. –
Agregaré que, por definición, la marca de tiempo de Unix es UTC. El método debería verificar si DateTime.Kind es UTC, Local o Unspecified. Como mínimo, si el Local I convertiría a UTC antes de realizar la conversión. Opcionalmente, si desea una marca de tiempo Unix que sea local, puede agregar una sobrecarga o un parámetro para no realizar la conversión a UTC. – Nate