Bekommen Timezone Offset-Server in C#
Wie kann ich die timezone-offset der physikalischen server laufen meinen code? Nicht irgendein date-Objekt oder ein anderes Objekt im Speicher.
Beispielsweise der folgende code erzeugt -4:00:00
:
<%= TimeZone.CurrentTimeZone.GetUtcOffset(new DateTime()) %>
Sein, wenn es -03:00:00
wegen der Sommerzeit
InformationsquelleAutor der Frage user1886419 | 2013-07-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
new DateTime()
geben Sie dem 1. Januar 0001, anstatt die aktuellen Datum/Zeit. Ich vermute, Sie möchten die aktuellen UTC-offset... und das ist, warum Sie nicht sehen, die daylight saving offset in deinem aktuellen code.Ich würde verwenden
TimeZoneInfo.Local
stattTimeZone.CurrentTimeZone
- es kann sich nicht auf die Dinge, aber es wäre auf jeden Fall ein besserer Ansatz.TimeZoneInfo
sollte ziemlich viel ersetzenTimeZone
im gesamten code. Dann können SieGetUtcOffset
:(Mit
DateTime.Now
sollte Arbeit als gut, aber es beinhaltet einige Magie hinter den kulissen, wenn es Sommerzeit übergänge rund um jetzt.DateTime
tatsächlich hat vier Arten, anstatt der angekündigten dreiaber es ist einfacher, nur zu vermeiden das Problem vollständig mitUtcNow
.)Oder natürlich Sie könnte meine Noda Zeit Bibliothek statt, der alle diese BCL-Müll 😉 (Wenn Sie tun eine Menge von Datum/Zeit Arbeit ich würde wärmstens empfehlen, dass - offensichtlich - aber wenn Sie nur Sie diese ein bisschen, es wäre wahrscheinlich übertrieben.)
InformationsquelleAutor der Antwort Jon Skeet
Da .NET 3.5, können Sie die folgenden von
DateTimeOffset
um den aktuellen offset.MSDN-Dokumentation
InformationsquelleAutor der Antwort Kasey Speakman
Scheint es einen Unterschied zwischen dem, wie
GetUtcOffset
arbeitet mitnew DateTime()
undDateTime.Now
. Wenn ich es in der Central Time Zone, die ich bekomme:Es ist ein bisschen ein Durcheinander, aber ich nehme an, Sie könnten dies auch tun:
InformationsquelleAutor der Antwort p.s.w.g
Wenn Ihr Vertrag eine neue
DateTime
Objekt wird esDateTime.MinValue
Wenn Sie erhalten, es ist
TimeZone.CurrentTimeZone.GetUtcOffset
bekommen Sie eigentlich die Zeitverschiebung, die für das Datum.Wenn Sie die
DateTime.Now
erhalten Sie das aktuelle Datum & Zeit und dafür ist der aktuelle offset.InformationsquelleAutor der Antwort asafrob