2009-11-19 38 views
5

Debo estar cometiendo un error obvio, pero no puedo resolverlo.Marca de tiempo de Unix a .net DateTime

Importación de una fecha almacenada en una base de datos mysql (la almacena ExpressionEngine CMS). Es una marca de tiempo Unix, es decir, segundos desde 1/1/1970 00:00.

Así que estoy haciendo algo como esto:

DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); 
dateTime = dateTime.AddSeconds(orderdate /* int read from the database */); 

Por desgracia, no obtener el resultado correcto. Aquí está un ejemplo:

valor leído del DB: 1258598728 (se trata de una fecha de la orden)

PayPal envía un correo electrónico que se establece el orden en 18 de Nov, 2009 12:45:20 PST

El sitio web php que lee este valor en la base de datos y sabe cómo mostrar esta fecha correctamente lo muestra como 2009-11-18 03:45 PM (que parece correcto ya que estoy alojado en un servidor en el costa este)

Mi código de arriba da 19/11/2009 2:45:28 AM !! (UTC que da 18/11/2009 9:45 PM hora del este, es decir, 6 horas de diferencia con lo que se espera)

obtengo el mismo resultado si uso DateTimeOffset teniendo cuidado de poner la zona horaria correcta.

¿Alguna idea de lo que estoy haciendo mal?

Respuesta

9

Prueba esto:

DateTime epoch = new DateTime(1970,1,1,0,0,0,0, DateTimeKind.Utc); 
DateTime myDate = epoch.AddSeconds(1258598728).toLocalTime(); 
+0

Imprime: 18/11/2009 9:45:28 PM aquí (GMT-4) – Gonzalo

+0

sí, sigue siendo el mismo valor que yo obtener (6 horas de diferencia con el valor esperado) –

+0

bien, entonces tiene que haber un problema con los datos. – scottm

0

Su conversión es correcta, los datos están mal. Esa es la explicación más simple y más probable.

Cuestiones relacionadas