Michel Perfetti
La gestion du temps en .Net
Autour de DateTime, tout un écosystème existe pour nous aider à gérer les problématiques de gestion du temps.
Par Michel Perfetti publié le 17/08/2008 à 23:59, lu 1414 fois, 5 pages
 3 | Gestion des fuseaux horaires
La conversion « temps local »/« temps universel » est essentielle car elle permet aux applications de se synchroniser sur un temps unique quelque soit l'endroit où sont situés les utilisateurs. On pourrait penser que la gestion du décalage horaire pourrait être simplement réduite à un décalage d'heure. Il n'en est rien : à cause du passage aux heures d'été et d'hiver, des endroits avec seulement un décalage de 6h par exemple, peuvent pendant une période passer à 7h. Les moments de ces passages ne sont pas identiques entre chaque pays.
Toutes ces informations forment le paramétrage des différents fuseaux horaires disponibles par l'utilisateur :
 
Sélection d'un fuseau horaire sous Windows Vista

Sélection d'un fuseau horaire sous Windows Vista

 
Ces informations sont disponibles directement depuis l'API native de Windows. Mais maintenant avec le Framework 3.5, elles sont directement disponibles en managé. La classe principale de cette gestion est la classe « TimeZoneInfo » : elle contient l'ensemble des informations qui permettent de décrire un fuseau horaire. En particulier :
  • Son nom,
  • Si il possède des changements d'heure,
  • Un identifiant universel,
  • Son décalage par défaut avec UTC.
Le décalage par défaut ne correspond pas toujours au décalage courant à cause du système heure d'été/hiver. Pour connaitre le décalage courant, la classe « TimeZoneInfo » possède la méthode GetUtcOffset. La propriété statique Local renvoie le fuseau courant.

DateTime now = DateTime.Now;

TimeZoneInfo PST = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");

TimeZoneInfo China = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");

 

DateTime SanFrancisco = TimeZoneInfo.ConvertTime(now, TimeZoneInfo.Local, PST);

DateTime Pekin = TimeZoneInfo.ConvertTime(now, TimeZoneInfo.Local, China);

Console.WriteLine(@"

Paris:        {0} {1}

San Francisco: {2} {3}

Pékin:        {4} {5}",

           now.ToShortDateString(), now.ToShortTimeString(),

           SanFrancisco.ToShortDateString(), SanFrancisco.ToShortTimeString(),

           Pekin.ToShortDateString(), Pekin.ToShortTimeString());

 

 

Console.ReadLine();

Le résultat de l'exécution de ce code est le suivant :
Paris: 15/08/2008 09:49
San Francisco: 15/08/2008 00:49
Pékin: 15/08/2008 15:49
 
» Démarrer une discussion