2009-11-19 8 views
5

Muszę robić oczywisty błąd, ale nie mogę tego rozgryźć.Uniwersalny znacznik czasu dla .net DateTime

Importuję datę zapisaną w bazie danych mysql (jest ona przechowywana przez ExpressionEngine CMS). Jest to znacznik czasu unix, czyli sekundy od 1/1/1970 00:00.

Więc robię coś takiego:

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

Niestety nie uzyskać odpowiedni efekt. Oto przykład:

Wartość odczytana z DB: (jest to data zamówienia)

Paypal wysłany email ustanawiający zamówienia u 18 listopad 2009 12:45:20 CET

Witryna php, która odczytuje tę wartość w DB i wie, jak wyświetlić tę datę, wyświetla ją poprawnie jako (co wydaje się być poprawne, ponieważ jestem hostowana na serwerze na serwerze). wschodnie wybrzeże)

Mój kod powyżej daje 11/19/2009 2:45:28 AM !! (UTC, które daje 11/18/2009 21:45 czasu wschodniego, czyli 6 godzin różnicy w stosunku do oczekiwanych wartości)

Otrzymuję ten sam wynik, jeśli korzystam z DateTimeOffset, dbając o ustawienie odpowiedniej strefy czasowej.

Każdy pomysł, co robię źle?

Odpowiedz

9

Spróbuj tego:

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

Drukuje: 11/18/2009 21:45:28 tutaj (GMT-4) – Gonzalo

+0

tak, ale wciąż nie ma tej samej wartości I get (różnica 6 godzin z oczekiwaną wartością) –

+0

cóż, to musi być problem z danymi. – scottm

0

konwersji jest poprawne, dane są błędne. To najprostsze i najbardziej prawdopodobne wyjaśnienie.