2017-09-23 4 views
0

Actuellement, les enregistrements sont stockés en UTC lorsque l'enregistrement a été réellement entré dans le système.Traitement international des heures d'enregistrement locales antérieures avec précision en fonction de l'heure d'été

Ma tâche consiste maintenant à permettre aux utilisateurs d'entrer des enregistrements d'événements passés et lorsque ces événements se sont produits localement lorsque l'événement s'est produit. Mon dilemme est qu'il n'y a pas seulement des fuseaux horaires différents, mais qu'il y a aussi des changements de l'heure d'été pendant certaines périodes de l'année.

Le signalement des événements personnels avec précision sous forme de graphique est la clé, donc ma question est, comment puis-je signaler correctement la date correcte à l'utilisateur? Parce que les gens déménagent dans des fuseaux horaires différents, la même personne pourrait revivre la même date et l'heure dans des endroits différents du monde.

Quelle est la meilleure façon de stocker et d'afficher ces événements à l'utilisateur? Les données de formulaire sont entrées via une application Web asp.net C# et stockées dans une base de données SQL Server. L'heure et la date entrées seront toujours la date et l'heure locales de l'utilisateur.

+0

Conservez-les en UTC. Vous ne spécifiez pas comment les utilisateurs ajoutent ces dates et où vous devez les afficher (application Web, application de bureau, etc.). –

+0

Salut, désolé ... ils sont affichés dans une application web en utilisant C# asp.net. – cloudseeker

+0

Mon conseil est de toujours utiliser les dates UTC pour stocker et échanger des données. Lorsque vous avez besoin de les afficher (ou d'acquérir une nouvelle date), votre meilleure option est de compter entièrement sur les technologies côté client (javascript) qui utiliseront les informations de fuseau horaire de l'utilisateur pour l'affichage et la création de la date. –

Répondre

1

Pour les événements d'occurrence unique dans le passé, la solution la plus simple serait de stocker en utilisant un champ datetimeoffset dans SQL Server et d'utiliser le type DateTimeOffset correspondant dans .NET. La partie date et heure de la valeur datetimeoffset reflète l'heure locale de l'événement et le décalage reflète la distance à laquelle l'heure locale est en avance ou en retard par rapport à l'heure UTC. Pour plus d'informations, voir DateTime vs DateTimeOffset.

Cette approche n'a pas besoin de compensation supplémentaire pour l'heure d'été. Comme il s'agit d'une seule occurrence, le décalage inclut à la fois l'heure standard et l'heure d'été applicable en vigueur à ce moment.

La partie difficile sera de recueillir une valeur précise DateTimeOffset d'entrée de l'utilisateur de votre site web MVC. À l'heure actuelle, il n'y a pas un simple contrôle intégré pour un DateTimeOffset. Au lieu de cela, vous devrez présenter une zone de saisie pour un DateTime, et présenter séparément une liste déroulante des offsets possibles. J'ai un code démo here qui va vous montrer comment générer cette liste. Utilisez-le pour remplir une liste déroulante, et vous pouvez laisser votre utilisateur choisir le décalage. Espérons que cela finira par fusionner avec ASP.NET Core, donc vous pourrez juste lier un DateTimeOffset directement un jour. Une discussion à ce sujet dans aspnet/Mvc#6648.