2009-10-13 7 views
3

Je dois stocker le datetime dans le fuseau horaire CST, quel que soit le fuseau horaire donné.Conversion de l'heure du système client local en CST et vice versa

Les clients qui accèdent à l'application sont à partir de différents fuseaux horaires, comme IST, CST, EST ...

je dois stocker toutes les entrées datetime par le client dans le fuseau horaire CST à ma base de données. Et tout en récupérant, j'ai besoin de revenir à la zone horaire locale.

Comment y parvenir?

Répondre

2

Il est généralement accepté de stocker toutes les valeurs de date et heure dans votre base de données au format GMT/UTC.

Pour ceux qui veulent rendre la valeur UTC à un fuseau horaire particulier pour les différents utilisateurs de l'application, comme wilpeck mentionné, il est suggéré que vous déterminez les utilisateurs finaux paramètres régionaux et:

  • lors de la persistance, magasin les paramètres régionaux avec la valeur de date UTC
  • lors de la lecture, rend la valeur UTC à l'heure locale avec la valeur locale associée

EDIT:

Par exemple:

Vous pourriez avoir une table avec un champ StartDateTime afin de soutenir plusieurs fuseaux horaires que vous pourriez avoir un champ supplémentaire StartDateTimeOffset. Si le client se trouve dans la zone de l'heure normale des Indiens (IST), vous pouvez avoir une valeur datetime du 13/10/2009 à 14h45 soit 2009/10/13 09:15 en UTC. Vous devez donc stocker la valeur UTC (2009/10/13 09:15) dans le champ StartDateTime et enregistrer le décalage +05: 30 dans le champ StartDateTimeOffset. Maintenant, lorsque vous lisez cette valeur à partir de la base de données, vous pouvez utiliser l'offset pour convertir la valeur UTC datetime (2009/10/13 09:15) à l'heure locale du 13/10/2009 14:45.

+0

Puis-je avoir un échantillon pour cela? par exemple: le système du client est chez IST et le serveur chez CST. – Prasad

+0

Édité pour inclure l'exemple –

+0

Merci cottsak, c'est très utile – Prasad

2

Quelque chose comme ceci devrait très probablement fonctionner pour vous. Je peux avoir une valeur incorrecte pour l'identifiant de fuseau horaire mais je pense que c'est proche. Le fuseau horaire de substance est disponible dans .NET 3.5+

DateTime clientDateTime = DateTime.Now; 
     DateTime centralDateTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(clientDateTime, "Central Time (US & Canada)"); 

EDIT:

Si vous pouvez stocker DateTime en UTC en détectant le fuseau horaire du client chaque fois qu'ils vous fournir une date qui serait la meilleure option. Ensuite, en fonction du fuseau horaire du client, vous pouvez afficher la date en fonction du fuseau horaire local du client.

+2

Cela a fini par jeter une exception pour moi. Utilisation de TimeZoneInfo.ConvertTimeBySystemTimeZoneId (date, "Central Standard Time") a fait l'affaire – CountMurphy

Questions connexes