Другие ответы здесь полезны, но они не охватывают, как получить доступ к Тихоокеанскому региону конкретно.
public static DateTime GmtToPacific(DateTime dateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(dateTime,
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
}
Как ни странно, хотя «тихоокеанское стандартное время» обычно означает нечто отличное от «тихоокеанского летнего времени», в данном случае оно относится к тихоокеанскому времени в целом. На самом деле, если вы используете его FindSystemTimeZoneById
для извлечения, одним из доступных свойств будет bool, сообщающий вам, находится ли данный часовой пояс в летнее время или нет.
Вы можете увидеть более обобщенные примеры этого в библиотеке, которую я бросил вместе, чтобы иметь дело с DateTimes, которые мне нужны в разных часовых поясах, в зависимости от того, откуда пользователь спрашивает, и т.д .:
https://github.com/b9chris/TimeZoneInfoLib.Net
Это не будет работать за пределами Windows (например, Mono в Linux), поскольку список времени поступает из реестра Windows:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\
Под ним вы найдете ключи (значки папок в редакторе реестра); имена этих ключей - то, что вы передаете FindSystemTimeZoneById
. В Linux вы должны использовать отдельный стандартный для Linux набор определений часовых поясов, который я недостаточно изучил.