As outras respostas aqui são úteis, mas não abordam como acessar o Pacífico especificamente - aqui está:
public static DateTime GmtToPacific(DateTime dateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(dateTime,
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
}
Curiosamente, embora "Horário padrão do Pacífico" normalmente signifique algo diferente de "Horário de verão do Pacífico", neste caso, refere-se ao horário do Pacífico em geral. De fato, se você FindSystemTimeZoneById
buscá-lo, uma das propriedades disponíveis é um booleano informando se esse fuso horário está atualmente no horário de verão ou não.
Você pode ver exemplos mais generalizados disso em uma biblioteca que acabei lançando para lidar com o DateTimes de que preciso em diferentes fusos horários, com base no local de solicitação do usuário, etc:
https://github.com/b9chris/TimeZoneInfoLib.Net
Isso não funcionará fora do Windows (por exemplo, Mono no Linux), pois a lista de horários vem do Registro do Windows:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\
Abaixo, você encontrará chaves (ícones de pastas no Editor do Registro); os nomes dessas chaves são para os quais você passa FindSystemTimeZoneById
. No Linux, você precisa usar um conjunto separado de definições de fuso horário, padrão do Linux, que não explorei adequadamente.