2009-05-20 5 views
3

Nous avons une application de reporting où tous DateTimes sont stockés dans UTC dans la base de données (SQL Server 2005)Affichage des données DateTime chez les utilisateurs TimeZone dans DataTable

L'application de rapports fonctionne être récupérer simplement un DataTable et se lier à un DataGrid affichage l'information.

Si nous connaissons l'utilisateurs connectés le fuseau horaire (par exemple +3 GMT), est-il possible de mettre à jour les dates de DataTables qui sont en UTC pour afficher maintenant dans la zone utilisateur du temps?

Nous savons que nous pouvons Spool répercutant chaque colonne/ligne dans le DataTable et effectuer une conversion, mais est-il un moyen plus efficace?

Répondre

0

Je modifier le temps tel qu'il est affiché à l'utilisateur. Conservez la cohérence de stockage, mais aussi stocker leur fuseau horaire, puis modifiez l'interface utilisateur pour afficher l'heure locale correcte. Par exemple, si leur fuseau horaire, heure normale du Centre, vous pouvez utiliser quelque chose de similaire au code suivant:

SomeDataObject someDataObject = new SomeDataObject(); 

someDataObject.TimeZone = -5; //UTC Timezone for Central Standard Time 
someDataObject.Time = DateTime.Now; 

DateTime someTime = someDataObject.Time; 
someTime.Add(someDataObject.TimeZone); // Display this back to the user 
+0

'UTC Fuseau horaire pour Central Standard time', quoi? –

0

Si vous utilisez .NET, il y a un construit en classe qui a été faite précisément à cette fin. TimeZoneInfo (http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx) tel que repris dans l'article:

Un objet TimeZoneInfo peut représenter un fuseau horaire, et méthodes de la classe TimeZoneInfo peut être utilisé pour convertir le temps dans un fuseau horaire à l'heure correspondant à tout autre moment, zone. Les membres de la classe TimeZoneInfo prennent en charge les opérations suivantes:

  • Récupération d'un fuseau horaire déjà défini par le système d'exploitation.
  • Énumération des fuseaux horaires qui sont disponibles sur un système.
  • Temps de conversion entre différents fuseaux horaires.
  • Création d'un nouveau fuseau horaire qui n'est pas déjà définie par le système d'exploitation.
  • Sérialisation d'un fuseau horaire pour une récupération ultérieure.

Espérons que cela aide.

+0

Notez que TimeZoneInfo n'est disponible que dans .NET 3.5 et versions ultérieures. – Liedman

Questions connexes