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

La classe TimeZoneInfo propose deux propriétés, Utc et Local, qui permettent à votre code d’accéder aux 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)

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

  2. Au lieu d’affecter l’objet TimeZoneInfo retourné par la propriété à une variable d’objet, continuez à accéder au temps universel coordonné via la propriété TimeZoneInfo.Utc.

Pour accéder au fuseau horaire local

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

  2. Au lieu d’affecter l’objet TimeZoneInfo retourné par la propriété à une variable d’objet, continuez à accéder au fuseau horaire local via la propriété TimeZoneInfo.Local.

Exemple

Le code suivant utilise les propriétés TimeZoneInfo.Local et TimeZoneInfo.Utc pour convertir une heure du fuseau horaire Est (États-Unis et Canada) et afficher le nom du fuseau horaire sur la console.

// 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 {timeZoneName} zone cannot be found in the registry.");
}
catch (InvalidTimeZoneException)
{
    Console.WriteLine("The registry contains invalid data for the {timeZoneName} zone.");
}

// The example produces the following output to the console:
//    At 1/1/2007 12:00:00 AM (UTC-05:00) Eastern Time (US & Canada), the local time is 1/1/2007 12:00:00 AM Eastern Standard Time.
//    At 1/1/2007 12:00:00 AM (UTC-05:00) Eastern Time (US & Canada), the time is 1/1/2007 5:00:00 AM UTC.

' 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

Vous devez toujours accéder au fuseau horaire local via la propriété TimeZoneInfo.Local plutôt qu’en affectant le fuseau horaire local à une variable d’objet TimeZoneInfo. De même, vous devez toujours accéder au temps universel coordonné via la propriété TimeZoneInfo.Utc plutôt qu’en affectant le fuseau horaire UTC à une variable d’objet TimeZoneInfo. Cela empêche la variable d’objet TimeZoneInfo d’être invalidée par un appel à la méthode TimeZoneInfo.ClearCachedData.

Compilation du code

Cet exemple nécessite :

  • Que l’espace de noms System soit importé avec l’instruction using (obligatoire dans le code C#).

Voir aussi