Les autres réponses ici sont utiles, mais elles ne couvrent pas spécifiquement comment accéder à Pacific - c'est parti:
public static DateTime GmtToPacific(DateTime dateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(dateTime,
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
}
Curieusement, bien que "Pacific Standard Time" signifie normalement quelque chose de différent de "Pacific Daylight Time", dans ce cas, il se réfère à l'heure du Pacifique en général. En fait, si vous utilisez FindSystemTimeZoneById
pour le récupérer, l'une des propriétés disponibles est un booléen vous indiquant si ce fuseau horaire est actuellement en heure d'été ou non.
Vous pouvez voir des exemples plus généralisés de cela dans une bibliothèque que j'ai fini par lancer ensemble pour gérer les DateTimes dont j'ai besoin dans différentes TimeZones en fonction de l'endroit où l'utilisateur demande, etc.
https://github.com/b9chris/TimeZoneInfoLib.Net
Cela ne fonctionnera pas en dehors de Windows (par exemple Mono sous Linux) car la liste des heures provient du registre Windows:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\
En dessous, vous trouverez des clés (icônes de dossier dans l'éditeur de registre); les noms de ces clés sont ce à quoi vous passez FindSystemTimeZoneById
. Sous Linux, vous devez utiliser un ensemble distinct de définitions de fuseau horaire standard Linux, que je n'ai pas suffisamment exploré.