Pozostałe odpowiedzi są przydatne, ale nie obejmują konkretnego sposobu uzyskania dostępu do Pacific - proszę bardzo:
public static DateTime GmtToPacific(DateTime dateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(dateTime,
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
}
Co dziwne, chociaż „Pacific Standard Time” zwykle oznacza coś innego niż „Pacific Daylight Time”, w tym przypadku odnosi się ogólnie do czasu pacyficznego. W rzeczywistości, jeśli użyjesz go FindSystemTimeZoneById
do pobrania, jedną z dostępnych właściwości jest wartość bool informująca, czy w tej strefie czasowej jest obecnie czas letni, czy nie.
Możesz zobaczyć bardziej uogólnione przykłady tego w bibliotece, którą ostatecznie zebrałem, aby poradzić sobie z datami, których potrzebuję w różnych strefach czasowych, w zależności od tego, skąd użytkownik pyta, itp.:
https://github.com/b9chris/TimeZoneInfoLib.Net
To nie zadziała poza systemem Windows (na przykład Mono w systemie Linux), ponieważ lista czasów pochodzi z rejestru systemu Windows:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\
Poniżej znajdziesz klucze (ikony folderów w Edytorze rejestru); nazwy tych kluczy są tym, do których przekazujesz FindSystemTimeZoneById
. W systemie Linux musisz użyć oddzielnego zestawu definicji stref czasowych w standardzie Linux, którego nie zbadałem odpowiednio.