2009-09-08 14 views
4

Je veux connaître le décalage horaire entre deux pays. Il y a bien sûr le décalage horaire statique, mais pendant certaines périodes, l'heure d'été entre. Pour autant que je sache, la période dst est également différente pour certains pays, donc le 1er juin la différence entre le pays a et b peut être 1 heure, le 1 juillet elle peut être 2 heures pour DST, et le 1 août elle peut être 1 etc etcC# calc heure diff entre 2 pays incl DST

Existe-t-il une fonction cadre ou dois-je le calculer moi-même?

Michel

Répondre

7

Vous devez savoir:

  • Les deux fuseaux horaires (utilisation TimeZoneInfo de .NET 3.5, en gardant à l'esprit qu'un pays peut avoir plusieurs fuseaux horaires)
  • Un instant dans le temps , par exemple un UTC DateTime ou un DateTimeOffset.

À ce moment-là, il est relativement facile: convertir l'instant UTC en heure locale dans les deux fuseaux horaires à l'aide TimeZoneInfo.ConvertTime et soustrayez un de l'autre. Vous pouvez également utiliser TimeZoneInfo.GetUtcOffset pour les deux et soustraire un décalage de l'autre.

Voici un exemple pour trouver la différence actuelle entre Londres et Mountain View:

using System; 

class Test 
{ 
    static void Main() 
    { 
     var mountainView = TimeZoneInfo.FindSystemTimeZoneById 
      ("Pacific Standard Time"); 
     var london = TimeZoneInfo.FindSystemTimeZoneById 
      ("GMT Standard Time"); 
     DateTimeOffset now = DateTimeOffset.UtcNow; 

     TimeSpan mountainViewOffset = mountainView.GetUtcOffset(now); 
     TimeSpan londonOffset = london.GetUtcOffset(now); 

     Console.WriteLine(londonOffset-mountainViewOffset); // 8 hours 
    } 
} 
+0

Merci pour la réponse. – Michel

0

Pour connaître toute différence historique (par exemple pour une date dans le passé lorsque les politiques de l'heure d'été locale pour l'une ou les deux fuseaux horaires étaient. différent), vous devrez stocker les politiques passées pour DST start/end/offset pour chaque fuseau horaire et les résoudre vous-même.

Si vous connaissez bien la différence en fonction de l'ensemble des règles actuellement chargées dans Windows, la méthode .NET intégrée est simple et directe.

+1

TimeZoneInfo dans .NET 3.5 est destiné à faire face aux changements historiques. C'est l'un de ses avantages sur TimeZone. –

Questions connexes