Die anderen Antworten hier sind nützlich, behandeln jedoch nicht speziell den Zugriff auf Pacific - los geht's:
public static DateTime GmtToPacific(DateTime dateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(dateTime,
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
}
Seltsamerweise bezieht sich "Pacific Standard Time" normalerweise auf etwas anderes als "Pacific Daylight Time", in diesem Fall jedoch auf die Pacific Time im Allgemeinen. Wenn Sie es FindSystemTimeZoneById
zum Abrufen verwenden, ist eine der verfügbaren Eigenschaften ein Bool, der Ihnen sagt, ob diese Zeitzone derzeit in der Sommerzeit ist oder nicht.
Sie können allgemeinere Beispiele dafür in einer Bibliothek sehen, die ich letztendlich zusammengestellt habe, um mit DateTimes umzugehen, die ich in verschiedenen Zeitzonen benötige, je nachdem, woher der Benutzer fragt, usw.:
https://github.com/b9chris/TimeZoneInfoLib.Net
Dies funktioniert außerhalb von Windows nicht (z. B. Mono unter Linux), da die Liste der Zeiten aus der Windows-Registrierung stammt:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\
Darunter finden Sie Schlüssel (Ordnersymbole im Registrierungseditor); Die Namen dieser Schlüssel sind das, woran Sie übergeben FindSystemTimeZoneById
. Unter Linux müssen Sie einen separaten Satz von Zeitzonendefinitionen nach Linux-Standard verwenden, die ich nicht ausreichend untersucht habe.