2010-10-25 5 views
2

Mon serveur attend des objets datetime au format GMT et mon application d'interface utilisateur crée et manipule toujours tous les objets datetime en fonction de la culture locale. Je ne peux pas modifier la culture car il existe d'autres fonctionnalités nécessitant les objets datetime selon le format local. J'ai écrit un convertisseur pour cela, je ne sais pas s'il y a une API qui me permet de le faire. Aussi un peu confus à propos de la méthode GetUtcOffset sur timezoneinfo, est-ce que ça fait la différence entre l'heure locale et l'heure gmt? la documentation disponible sur msdn, a été un peu crptic pour moi.S'il vous plaît pouvez-vous aider? Aussi comment puis-je tester l'unité, en changeant la culture et en vérifiant la sortie?TimeZoneInfo | GetUtcOffset: Une meilleure solution?

La classe below convertit les objets de date et heure pour qu'ils contiennent un équivalent de l'heure GMT et les convertit également lors de la réception du serveur.

Remarque: Mon serveur et l'interface utilisateur s'exécutent à l'heure CET, mais ces objets datetime sont spécifiques au Royaume-Uni et par conséquent le serveur en a besoin en GMT.

public class GmtConverter : IDateConverter 
    { 
     private readonly TimeZoneInfo timeZoneInfo; 

     public GmtConverter() 
      : this(TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time")) 
     { 

     } 
     public GmtConverter(TimeZoneInfo timeZoneInfo) 
     { 
      this.timeZoneInfo = timeZoneInfo; 
     } 

     public DateTime Convert(DateTime localDate) 
     { 
      var utcOffset = timeZoneInfo.GetUtcOffset(localDate); 

      var unSpecified = localDate + utcOffset; 

      return DateTime.SpecifyKind(unSpecified, DateTimeKind.Unspecified); 
     } 

     public DateTime ConvertBack(object local) 
     { 
      var localDate = (DateTime) local; 

      var utcOffset = timeZoneInfo.GetUtcOffset(localDate); 

      var unSpecified = localDate - utcOffset; 

      return DateTime.SpecifyKind(unSpecified, DateTimeKind.Unspecified);    
     } 
    } 
+0

question connexe: http://stackoverflow.com/questions/2532729/daylight-saving-time -and-timezone-best-practices – Oded

Répondre

0

Quand vous dites GMT, voulez-vous dire UTC? De Wikipedia:

En usage occasionnel, lorsque des fractions de seconde ne sont pas importants, Greenwich Mean Time (GMT) peut être considéré comme équivalent à UTC ou UT1. Dire "GMT" implique souvent soit UTC ou UT1 lorsque utilisé dans des contextes informels ou occasionnels . Dans des contextes techniques, l'utilisation de "GMT" est évitée; la terminologie non ambiguë "UTC" ou "UT1" est préférée.

Si oui, le problème est résolu:

Questions connexes