39 votes

Comment faire les fuseaux horaires? Dans asp.net mvc

sur mon site j'ai besoin de savoir quel fuseau horaire de personnes sont de pour afficher des messages au bon moment.

Donc, je ne suis pas trop sûr de ce que pour être à la recherche d'un tutoriel de comment faire cela.

Donc ce que je prévois de faire, c'est un utilisateur de venir à mon site et ils établissent leurs fuseau horaire en sélectionnant à partir d'une liste déroulante. Je stocke les paramètres dans ma base de données et de les utiliser pour calculer la fois.

Donc, je ne suis pas sûr de ce que j'ai besoin.

Comme ce qui devrait être ma base de données de temps de stockage? J'ai lu quelque part qu'il devrait être UTC? Alors, comment puis-je régler mon db pour ce faire?(Aussi je vais sur un hébergement mutualisé de site de sorte qu'il doit être réglé de sorte que je peux le faire? peut-être webconfig?).

Ensuite, j'aurais besoin d'une liste de tous les fuseaux horaires, soit a un html helpr réguliers ou html. Je ne veux vraiment pas à en faire un.

Ensuite, comme je l'ai dit j'ai besoin d'un tutoriel qui montre ce que je fais. Je pense que c'est l'addition et la soustraction des trucs à partir de ce moment-là? Mais je peux me tromper, cependant.

Merci

36voto

womp Points 71924

À cette fin, vous devriez certainement stocker votre horodatages UTC dans la base de données.

Lorsque vous avez besoin pour afficher une date à partir de la base de données sur votre site, vous pouvez faire ceci:

DateTime stamp = /* get datetime from the database here, make sure you
                    use the constructor that allows you to specify the 
                    DateTimeKind as UTC. */

//E.g.
//DateTime stamp = new DateTime(2009, 12, 12, 12, 12, 12, DateTimeKind.Utc);

timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(" /* users time zone here */"); 
var convertedTime = TimeZoneInfo.ConvertTime(stamp, timeZoneInfo);

//Print out the date and time
//Console.WriteLine(convertedTime.ToString("yyyy-MM-dd HH-mm-ss"));

La liste des fuseaux horaires est déjà disponible dans .Net, de sorte que vous pouvez voir ce post sur la façon de les énumérer. Pour ASP.Net MVC, au lieu de l'impression, le temps, vous voulez affecter le converti datetime à une propriété du modèle de la classe de votre point de Vue pourrait l'utiliser pour l'affichage.

9voto

Brian Gideon Points 26683

Je ne peux pas souligner à quel point il est important d'utiliser UTC pour le stockage et le traitement de toute demande que vous écrivez. Même si vous savez que l'application va jamais être utilisé seulement dans un seul fuseau horaire, il est toujours beaucoup plus facile de travailler avec l'UTC que d'un fuseau horaire local en raison de l'heure d'été à des problèmes de temps.

Il n'y a vraiment rien de spécial que vous devez faire au niveau base de données. Il suffit de créer un normal de la colonne datetime, mais assurez-vous qu'il est documenté clairement que la colonne est supposée être UTC.

Je vais être honnête, asp.net n'est pas mon domaine, mais je pense que vous pourriez obtenir le fuseau horaire de la demande du client en quelque sorte. En fait, parce que l'heure d'été règles de temps peut être assez obscure, selon la région, il pourrait être préférable d'utiliser un script java qui calcule le décalage UTC et l'utiliser pour faire les conversions. Même après la Loi sur la Politique Énergétique de 2005, il y a toujours des exceptions à la règles d'heure d'été qui serait plutôt difficile à traiter sur le côté serveur. Cependant, je pense que vous avez idée de ce qui permet au client de définir leur propre fuseau horaire serait bien travailler dans la plupart des cas.

2voto

jscharf Points 2519

Commencez par consulter MSDN pour la documentation DateTime et lisez-la. Voici un article sur les meilleures pratiques avec DateTime qui couvre les fuseaux horaires et UTC.

Oui, vous devriez stocker UTC dans votre base de données. Le fait de stocker DateTimes au format UTC vous permettra de convertir les heures en utilisateurs (et à partir de ceux-ci) en fonction du fuseau horaire sélectionné. Vous êtes sur la bonne voie!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X