Wie verwende ich TimeZoneInfo, um während der Sommerzeit lokale Zeit zu erhalten?
Ich versuche, DateTimeOffset zu vermitteln, einen bestimmten moment in der Zeit über jede Zeitzone. Ich kann nicht herausfinden, wie zu verwenden TimeZoneInfo, befassen sich mit Sommerzeit.
var dt = DateTime.UtcNow;
Console.WriteLine(dt.ToLocalTime());
var tz = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
var utcOffset = new DateTimeOffset(dt, TimeSpan.Zero);
Console.WriteLine(utcOffset.ToOffset(tz.BaseUtcOffset));
Dieser druckt:
6/2/2010 4:37:19 PM
6/2/2010 3:37:19 PM -06:00
Ich bin in der central time zone, und wir sind derzeit in der Sommerzeit.
Ich bin versuchen, um die zweite Zeile zu Lesen:
6/2/2010 4:37:19 PM -05:00
BaseUtcOffset anscheinend nicht ändern basiert auf Sommerzeit.
Wie bekomme ich den richtigen Zeitpunkt mit der richtigen offset-Wert?
InformationsquelleAutor der Frage jaminto | 2010-06-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie Holen Sie sich die UtcOffset aus der TimeZoneInfo, übergeben, die ToOffset () - Methode:
InformationsquelleAutor der Antwort Paul Kearney - pk
Können Sie auch TimeZoneInfo.ConvertTimeFromUtc, die es erlauben, für die Sommerzeit:
InformationsquelleAutor der Antwort Karl Gjertsen
Oder besser, wenn Sie nicht möchten, codieren Sie die Zeit-zone identifier:
InformationsquelleAutor der Antwort Pabinator
Ich bin ein Anfänger beide an .NET und stackoverflow, also ich könnte falsch sein, aber hier geht:
Mit TimeZoneInfo.ConvertTimeFromUtc wird es ermöglichen, die Sommerzeit, und zu konvertieren, um die korrekte Zeit je nach Zeitzone + eine mögliche DST-offset. Aber - der offset selbst im resultierenden Objekt zeigt den offset für die Normalzeit und nicht die Sommerzeit berücksichtigt. Also, wenn Sie wollen, eine ToString-Methode auf dem Objekt, werden Sie am Ende mit der richtigen Zeit (in Stunden und Minuten), aber die falschen offset während der Sommerzeit, was dazu führen kann, im falschen moment in der Zeit später in den code.
Wenn Sie stattdessen die GetUtcOffset um den offset für eine bestimmte Zeit, und dann eine ToOffset auf der DateTimeOffset-Objekt, die beide die Stunden/Minuten und der offset selbst wird korrekt konvertiert, und Sie können sicher tun, eine ToString.
localTime wird wieder "2017-10-09T10:00:00+03:00".
datetimeoffset timezoneinfo getutcoffset
InformationsquelleAutor der Antwort Niels Pein