2009-11-19 19 views
5

Devo fare un errore evidente ma non riesco a capirlo.Timestamp Unix a .net DateTime

Sto importando una data memorizzata in un database mysql (è memorizzata dal CMS ExpressionEngine). È un timestamp unix, ovvero secondi dall'1/1/1970 alle 00:00.

così sto facendo qualcosa di simile:

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

Purtroppo non si ottiene il risultato giusto. Ecco un esempio:

Valore letto dal DB: 1.258.598,728 mila (si tratta di un giorno d'incarico)

Paypal ha inviato una e-mail che stabilisce l'ordine al Nov 18, 2009 12:45:20 PST

Il sito Web php che legge questo valore nel DB e sa come visualizzare questa data lo visualizza correttamente come 2009-11-18 03:45 PM (che sembra corretto poiché sono ospitato su un server sul costa est)

Il mio codice sopra dà 19/11/2009 02:45:28 !! (UTC che dà 18/11/2009 21:45 ora est, ovvero 6 ore di differenza con quanto previsto)

Ottengo lo stesso risultato se si utilizza DateTimeOffset avendo cura di inserire il fuso orario corretto.

Qualche idea su cosa sto facendo male?

risposta

9

Prova questa:

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

Stampa: 18/11/2009 21:45:28 qui (GMT-4) – Gonzalo

+0

sì, ho ancora lo stesso valore I ottenere (6 ore di differenza con il valore atteso) –

+0

bene, quindi deve essere un problema con i dati. – scottm

0

vostra conversione è corretta, i dati sono sbagliato. Questa è la spiegazione più semplice e più probabile.