2009-11-13 4 views
1

Notre application actuelle stocke toutes les dates via le datetime du serveur. Je pense que nous devons mettre à jour toutes les valeurs datetime dans la base de données sur l'heure UTC.Conversion d'une application Web asp.net/sql en une zone de disponibilité

Maintenant, pour afficher ces dates à l'utilisateur, je sais que .Net 3.5 a des types de données qui sont spécifiques aux décalages de temps de date. Mais est-ce que quelqu'un voit quelque chose de mal à définir une variable d'application pour représenter le fuseau horaire souhaité pour le site, puis faire un dateadd avec ce décalage pour afficher les temps à l'utilisateur? Par exemple, le fuseau horaire de l'Est aurait une valeur de "-5".

Répondre

0

Jetez un oeil à Coding Best Practices using DateTime in the .NET Framework. Ce n'est pas une lecture difficile et vous vous remerciez de les avoir mis en œuvre de cette façon - par exemple, vous n'aurez pas à gérer les changements de l'heure d'été si vous utilisez la gestion du fuseau horaire fournie par .NET, par exemple.

1

On dirait que vous voulez réinventer la roue. Si l'application est une application Web ou géographiquement distribuée, vous devez connaître le fuseau horaire des utilisateurs. Connaître l'heure exacte du serveur peut ne pas leur être utile.

Voir cette question pour un exemple de code:

How to render local time given UTC datetime values in ASP.Net without using Javascript?

+0

J'ai mal compris - donc vous demandez si vous pouvez autoriser un décalage à vos valeurs datetime? Bien sûr, techniquement vous pouvez le faire, mais je ne le ferais pas, pour deux raisons: - si votre application ajoute un décalage, seule votre application (et vous) saura comment interpréter les données dans la base de données - il est facile de réparer vos données existantes – cdonner

+0

Mes valeurs datetime actuelles devraient-elles être converties en UTCTime ou en quelque chose comme DateTimeOffset de Sql 2008, qui stocke le décalage avec la date? – user210132

+0

Cela ne nécessiterait-il pas deux étapes pour afficher un datetime localisé dans le fuseau horaire d'un utilisateur (implicite ou explicite)? Vous devez d'abord convertir en UTC, puis dans le fuseau horaire de l'utilisateur? Je ne vois aucun avantage à le faire, mais je n'ai pas le contexte opérationnel complet. – cdonner

0

Eh bien, aussi longtemps que vous gérez l'heure d'été "correctement". À part cela, si votre base de données a quelque chose à voir avec le web, les enregistrements devraient définitivement stocker UTC. L'UTC ne "saute" pas sur l'heure d'été, donc il n'y a aucun problème à trier les enregistrements entrés pendant le changement d'heure et le calcul de datediff est toujours correct.

0

Dans la dernière version de .NET, vous obtenez la classe TimeZoneInfo qui aide à convertir les dates.

Vous stockez les dates en GMT, stockez également le fuseau horaire de l'utilisateur, puis convertissez les dates chaque fois que vous devez les afficher. La partie la plus difficile concerne l'heure d'été. La classe TimeZoneInfo devrait aider avec ceci. Avant que cette classe soit disponible, vous deviez tout faire vous-même, en stockant des tables de données sur les fuseaux horaires et les plages de dates de l'heure d'été dans chaque fuseau horaire.