Partager via


Comment : accéder aux objets UTC et aux objets de fuseau horaire local prédéfinis

Mise à jour : novembre 2007

La classe TimeZoneInfo fournit deux propriétés, Utc et Local, qui permettent à votre code d'accéder à des objets de fuseau horaire prédéfinis. Cette rubrique explique comment accéder aux objets TimeZoneInfo retournés par ces propriétés.

Pour accéder à l'objet TimeZoneInfo de temps universel coordonné (UTC, Coordinated Universal Time)

  1. Utilisez la propriété static (Shared dans Visual Basic) TimeZoneInfo.Utc pour accéder au temps universel coordonné.

  2. Plutôt que d'assigner l'objet TimeZoneInfo retourné par la propriété à une variable objet, utilisez la propriété TimeZoneInfo.Utc pour accéder au temps universel coordonné.

Pour accéder au fuseau horaire local

  1. Utilisez la propriété static (Shared dans Visual Basic) TimeZoneInfo.Local pour accéder au fuseau horaire du système local.

  2. Plutôt que d'assigner l'objet TimeZoneInfo retourné par la propriété à une variable objet, utilisez la propriété TimeZoneInfo.Local pour accéder au fuseau horaire local.

Exemple

Le code suivant utilise les propriétés TimeZoneInfo.Local et TimeZoneInfo.Utc pour convertir une heure de la côte est des États-Unis et du Canada et afficher le nom du fuseau horaire sur la console.

' Create Eastern Standard Time value and TimeZoneInfo object      
Dim estTime As Date = #01/01/2007 00:00:00#
Dim timeZoneName As String = "Eastern Standard Time"
Try
   Dim est As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName)

   ' Convert EST to local time
   Dim localTime As Date = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Local)
   Console.WriteLine("At {0} {1}, the local time is {2} {3}.", _
           estTime, _
           est, _
           localTime, _
           IIf(TimeZoneInfo.Local.IsDaylightSavingTime(localTime), _
               TimeZoneInfo.Local.DaylightName, _
               TimeZoneInfo.Local.StandardName))

   ' Convert EST to UTC
   Dim utcTime As Date = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Utc)
   Console.WriteLine("At {0} {1}, the time is {2} {3}.", _
           estTime, _
           est, _
           utcTime, _
           TimeZoneInfo.Utc.StandardName)
Catch e As TimeZoneNotFoundException
   Console.WriteLine("The {0} zone cannot be found in the registry.", _
                     timeZoneName)
Catch e As InvalidTimeZoneException
   Console.WriteLine("The registry contains invalid data for the {0} zone.", _
                     timeZoneName)
End Try
// Create Eastern Standard Time value and TimeZoneInfo object      
DateTime estTime = new DateTime(2007, 1, 1, 00, 00, 00);
string timeZoneName = "Eastern Standard Time";
try
{
   TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);

   // Convert EST to local time
   DateTime localTime = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Local);
   Console.WriteLine("At {0} {1}, the local time is {2} {3}.", 
           estTime, 
           est, 
           localTime, 
           TimeZoneInfo.Local.IsDaylightSavingTime(localTime) ?
                     TimeZoneInfo.Local.DaylightName : 
                     TimeZoneInfo.Local.StandardName);

   // Convert EST to UTC
   DateTime utcTime = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Utc);
   Console.WriteLine("At {0} {1}, the time is {2} {3}.", 
           estTime, 
           est, 
           utcTime, 
           TimeZoneInfo.Utc.StandardName);
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The {0} zone cannot be found in the registry.", 
                     timeZoneName);
}
catch (InvalidTimeZoneException)
{
   Console.WriteLine("The registry contains invalid data for the {0} zone.", 
                     timeZoneName);
}

Vous devez toujours utiliser la propriété TimeZoneInfo.Local pour accéder au fuseau horaire local plutôt que d'assigner le fuseau horaire local à une variable objet TimeZoneInfo. De la même façon, vous devez toujours faire appel à la propriété TimeZoneInfo.Utc pour accéder au temps universel coordonné plutôt que d'assigner le fuseau horaire UTC à une variable objet TimeZoneInfo. Ainsi, la variable objet TimeZoneInfo ne peut pas être invalidée par un appel à la méthode TimeZoneInfo.ClearCachedData.

Compilation du code

Cet exemple nécessite :

  • qu'une référence à System.Core.dll soit ajoutée au projet ;

  • que l'espace de noms System soit importé avec l'instruction using (requise en code C#).

Voir aussi

Tâches

Comment : instancier un objet TimeZoneInfo

Concepts

Recherche des fuseaux horaires définis sur un système local

Autres ressources

Heures et fuseaux horaires