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)
Utilisez la propriété static (Shared dans Visual Basic) TimeZoneInfo.Utc pour accéder au temps universel coordonné.
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
Utilisez la propriété static (Shared dans Visual Basic) TimeZoneInfo.Local pour accéder au fuseau horaire du système local.
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