2014-02-18 10 views
7

Ich bemerkte dieses seltsame Problem in Bezug auf. ToUniversalTime(), aber ich kann nicht herausfinden, warum.. ToUniversalTime(), warum funktioniert es so?

Wenn ich auseinander

DateTime currentServerTime = System.DateTime.Now; 
DateTime currentUTCServerTime = currentServerTime.ToUniversalTime(); 

log.Debug("Current server time :" + currentServerTime); 
log.Debug("Current Server UTC Time is :" + currentUTCServerTime); 

Ergebnis

Current server time :2/18/2014 2:09:23 PM 
    Current Server UTC Time is :2/18/2014 7:09:23 PM 

5 Stunden schaffen.

Gegeben ist der Server an der Ostküste, mit -5 versetzt. Das ist richtig.

Wenn ich aber tue

String dateTimeString = "7/10/2013"; 
DateTime baseLined = Convert.ToDateTime(dateTimeString); 
DateTime convertedUTCTime = baseLined.ToUniversalTime(); 

log.Debug(dateTimeString + " is :"+baseLined); 
log.Debug(dateTimeString + " UTC time is :" + convertedUTCTime); 

Ergebnis

7/10/2013 is : 7/10/2013 12:00:00 AM 
7/10/2013 UTC time is: 7/10/2013 4:00:00 AM 

4 Stunden auseinander.

Warum ein Ergebnis zeigt 5 Stunden Unterschied und ein anderes zeigt 4 ????

Bitte helfen.

=== ==== bearbeiten

Dank Jon und Usr. Jetzt verstehe ich. ToUniversalTime() berücksichtigt DST des Servers und passt die UTC entsprechend dem DateTime-Objekt an, an das es angehängt ist.

Also versuche ich immer noch, meinen Kopf für diese Situation darum zu wickeln.

In meiner Datenbank, 7/10/2013 ist ein Fälligkeitsdatum und wurde als "7/10/2013 4:00:00 AM" aufgezeichnet (Da während dieser Zeit war es während der Sommerzeit, Offset -4) .

Jetzt ist es in Februar 2014, DST ist nicht in Kraft, Offset ist jetzt -5. Wenn ich jedoch den Zeitzonen-Offset des Benutzers -5 auf "7/10/2013 4:00:00 AM" anwähle, wird dies zum 7/09/2013 anstatt zum 7/10/2013.

Wie gehe ich mit dieser Situation um?

+1

"Vorausgesetzt, der Server befindet sich an der Ostküste, mit -5 Offset. Das ist richtig." - Was denkst du, ist der Offset am 10. Juli? –

+0

@Jon, wow, okay. Das erklärt es sehr. Das bedeutet also, dass ToUniversalTime() auch den Sommerzeit-Offset des Servers berücksichtigt? Das wusste ich nicht !!! – Liming

+0

Ja, es wird die lokale Zeit in eine universelle Zeit umwandeln. Es wäre ziemlich nutzlos, wenn es DST nicht einhalten würde, um ehrlich zu sein. –

Antwort

5

Wegen daylight savings. Die Ortszeit ist so, wie sie auf Ihrer Uhr erscheint. UTC ist kontinuierlich ohne Lücken, ohne unklare Zeitpunkte.

+1

Danke usr. Ich hatte ein falsches Verständnis von ToUniversalTime() aus seltsamen Gründen, es sieht so aus, als ob es die Sommerzeit braucht, wo auch der Server in Betracht kommt. In diesem Fall, wie kann ich feststellen, ob eine Zeit durch Sommerzeit eingestellt wurde oder nicht? – Liming

+0

@Liming das ist eine neue Frage, die ich nicht beantworten kann. – usr