Las otras respuestas aquí son útiles, pero no cubren cómo acceder específicamente a Pacific; aquí tienes:
public static DateTime GmtToPacific(DateTime dateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(dateTime,
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
}
Por extraño que parezca, aunque "Hora estándar del Pacífico" normalmente significa algo diferente de "Hora de verano del Pacífico", en este caso se refiere a la hora del Pacífico en general. De hecho, si usa FindSystemTimeZoneById
para buscarlo, una de las propiedades disponibles es un bool que le dice si esa zona horaria está actualmente en horario de verano o no.
Puede ver ejemplos más generalizados de esto en una biblioteca que terminé juntando para tratar con DateTimes que necesito en diferentes TimeZones en función de dónde pregunta el usuario, etc.
https://github.com/b9chris/TimeZoneInfoLib.Net
Esto no funcionará fuera de Windows (por ejemplo, Mono en Linux) ya que la lista de veces proviene del Registro de Windows:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\
Debajo encontrará claves (iconos de carpeta en el Editor del Registro); los nombres de esas teclas son a lo que pasas FindSystemTimeZoneById
. En Linux, debe usar un conjunto separado de definiciones de zonas horarias estándar de Linux, que no he explorado adecuadamente.