2016-10-12 2 views
0

Ich habe ein Problem mit der ToUniversalTime() Methode.DateTime.ToUniversalTime() nicht korrekt

Ein bisschen Information zuerst: Ich lebe und arbeite in Deutschland, also ist meine Standardzeitzone UTC + 1. Aber jetzt (im Sommer) ist meine Zeitzone UTC + 2.

Ich muss meine lokale Zeit in UTC für meine Anwendung konvertieren. Also habe ich zuerst versucht:

OutputTime = InputTime.ToUniversalTime(); 

aber das nur 1 Stunde statt zwei subtrahiert. I Nach einem wenig Forschung entdeckt, dass InputTime.Kind waren Unspecified, also habe ich versucht:

InputTime= DateTime.SpecifyKind(InputTime, DateTimeKind.Local); 
OutputTime = InputTime.ToUniversalTime(); 

aber immer noch das gleiche Problem.

Und mein größtes Problem ist, dass wenn ich diese versuchen

TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now) 

es mir eine Zeitspanne von zwei Stunden ergibt.

Irgendwelche Ideen bitte? Dank

+5

Wir wissen nicht, was 'InputTime' ist, das hilft nicht. (Wenn es sich um ein Datum handelt, das in Ihrer Zeitzone nicht in die Sommerzeit fällt, würde das das Problem erklären.) Bitte geben Sie [mcve] an. Ich vermute stark, dass das Problem eher in Ihren Erwartungen liegt als in diesem Fall mit "ToUniversalTime". (So ​​wie ich 'DateTime' nicht mag, glaube ich nicht, dass dieser bestimmte Anruf wahrscheinlich unterbrochen wird.) –

+0

Warum müssen Sie die Zeit umrechnen? Die Uhrzeit ist bereits im Computer als UTC gespeichert. Bei der Eingabe der Uhrzeit werden standardmäßig die lokalen Zeitzoneneinstellungen des Computers verwendet. Wenn Sie Daten in einer anderen Zeitzone erfassen, müssen Sie bei der Dateneingabe die Zeitzone angeben. Wenn die Ausgabe in der aktuellen Zeitzone angezeigt wird. Wenn Sie mit einer anderen Zeitzone ausgeben möchten, können Sie konvertieren. – jdweng

+0

Eingabezeit ist ein Zeitstempel im Format (yyyyddMMTHHmmss) in es ist der Wert, den mein Programm vom Benutzer erhält, so ist es die gleiche Zeit Sohn wie der PC, der dieses Programm ausgeführt wird. Ich nedd die Zeit in UTC zu konvertieren, da ich eine ICS-Datei erstellen und senden. – electron2302

Antwort

0

Nicht sicher, ob es die beste Lösung ist, aber das funktioniert sicher:

var InputTime = new DateTime(2016, 10, 12, 12, 22, 0, DateTimeKind.Local); 
var offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now); 
var OutputTime = DateTime.SpecifyKind(InputTime - offset, DateTimeKind.Utc); 
+0

danke! Es funktioniert (: – electron2302

+0

Beachten Sie, dass dies schief gehen kann, wenn 'InputTime' außerhalb der Sommerzeit liegt (zB Dezember) und' DateTime.Now' drin ist. Also statt "GetUtcOffset (DateTime.Now)" haben Sie einfach zu tun 'GetUtcOffset (InputTime)'. –

+0

Ich hatte es sowieso geändert, aber trotzdem danke für den Hinweis – electron2302