Другие ответы здесь полезны, но они не охватывают, как получить доступ к Тихоокеанскому региону - вот вам:
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 набор определений часовых поясов, который я недостаточно изучил.