C#: sicherstellen, dass die DateTime.Jetzt gibt die GMT + 1 Zeit
Ich bin mit DateTime.Now
zu zeigen, etwas nach dem heutigen Datum, und bei der Arbeit vor Ort (Malta, Europa) die Zeiten werden korrekt angezeigt (offensichtlich wegen der Zeitzone) aber natürlich, wenn ich es hochladen zu meinem hosting-server (USA), DateTime.Now
repräsentieren nicht die richtige Zeitzone.
Daher in meinem code, wie kann ich umwandeln DateTime.Now
ordnungsgemäß zurückgeben, die die Zeit von der GMT + 1 Zeitzone ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die TimeZoneInfo-Klasse im System.Kern;
Müssen Sie die DateTimeKind auf DateTimeKind.Utc für diese.
Nur wenn Sie .Net 3.5 aber!
Es hängt davon ab, was du damit meinst "eine mit der GMT + 1 Zeitzone". Meinst du dauerhaft UTC+1, oder meinst du UTC+1 oder UTC+2, je nach DST?
Wenn Sie .NET 3.5, verwenden Sie
TimeZoneInfo
um eine angemessene Zeit-zone, dann verwenden:Müssen Sie, um die system-ID für das Malta Zeit-zone, aber Sie können das leicht tun, indem Sie diesen code lokal:
Beurteilung durch Ihre Kommentare, wird dieses bit wird unerheblich sein, aber nur für andere...
Wenn Sie nicht mit .NET 3.5, die Sie benötigen, um die Sommerzeit selbst. Um ehrlich zu sein, die einfachste Weg zu tun, ist eine einfache lookup-Tabelle. Aus der Arbeit des Sommerzeit-änderungen für die nächsten paar Jahre, dann schreiben Sie eine einfache Methode, um die Rückkehr der offset zu einem bestimmten UTC-Zeit, die Liste hardcoded. Sie wollen sortiert
List<DateTime>
mit den bekannten Veränderungen in und wechseln zwischen 1 und 2 Stunden, bis Ihr Datum nach der letzten änderung:Ich glaube nicht, dass Sie eine Eigenschaft in Ihrem code, die machen DateTime.Jetzt wieder etwas anderes als die aktuelle Zeit des Computers, in dem der code ausgeführt wird. Wenn Sie möchten, haben eine Art, immer eine andere Zeit, werden Sie wahrscheinlich benötigen, um wickeln Sie Sie in einer anderen Funktion. Sie können tun können, die round-trip über UTC und fügen Sie die gewünschte offset:
(Codebeispiel aktualisiert, nachdem Luke ' s Kommentar über das Innenleben von DateTime.Jetzt)
DateTime.UtcNow.AddHours(1)
stattdessen sparen Sie einige Tippen!DateTime.Now
verwendetUtcNow
hinter den kulissen, so dass Ihre original-code übersetzt so etwas wieDateTime.UtcNow.ToLocalTime().ToUniversalTime().AddHours(1)
.UtcNow
ist die Konvertierung vonFILETIME
- ticks seit 01/01/1601 - zuDateTime
- ticks seit 01/01/0001. Die zweite Magische Zahl ist eine Maske, die intern verwendet werden, um zu bedeutenDateTimeKind.Utc
.)