0 votes

Conception de l'application .Net

Nous sommes en train de créer une application avec les détails ci-dessous.

1) Application Web/Desktop en C#.Net

2) Stocke l'horodatage de l'activité des utilisateurs en tant que champ datetime.

Nous devons stocker cet horodatage au format UTC.

Maintenant, lors de l'affichage, il sera converti en fuseau horaire de l'utilisateur.

Problème

L'utilisateur peut se déplacer d'un bureau à un autre. (plusieurs bureaux dans des fuseaux horaires différents).

Supposons maintenant que nous voulions afficher l'activité de l'utilisateur pour un mois. (Cela pourrait inclure différents fuseaux horaires).

Comment pouvons-nous stocker/suivre les informations sur le fuseau horaire des utilisateurs?

Afin de convertir l'heure à l'exécution et d'afficher l'heure correcte.

par exemple

Temps UTC

jour 1 : heure 1

jour 2: heure 2

UTC +1:30

jour 3: heure 3

etc..

Pouvez-vous suggérer comment ce problème peut être résolu.

Merci d'avance.

4voto

Mikael Svenson Points 18243

Si vous utilisez DateTime.UtcNow lorsque vous enregistrez l'horodatage de l'activité, vous obtiendrez toujours l'heure correcte. Et généralement, c'est le serveur qui stockera l'horodatage, donc c'est relatif au serveur de toute façon.

Si l'utilisateur le saisit, alors vous devez convertir l'heure d'entrée en UTC avant de l'enregistrer. Cela peut être récupéré à partir des paramètres Culture/Fuseau horaire de l'utilisateur.

Lorsque vous l'affichez à l'utilisateur, vous définissez les informations de Culture et de Fuseau horaire sur le thread en fonction de l'endroit dans le monde où se trouve l'utilisateur.

Si vous ne stockez pas la partie "UTC" de la date dans votre base de données (même si elle est au format UTC), vous pouvez la convertir en UTC de cette manière :

DateTime date = ..from db..;
date = DateTime.SpecifyKind(date, DateTimeKind.Utc);

Pour convertir entre les fuseaux horaires, consultez MSDN.

1voto

jgauffin Points 51913
  1. Enregistrez tous les enregistrements dans la base de données en utilisant myDate.ToUniversalTime()
  2. Lors du chargement à partir de la base de données en utilisant myDate.ToLocalTime()

Ensuite, vos utilisateurs peuvent se déplacer autant qu'ils le souhaitent.

0voto

Serkan Hekimoglu Points 2163
Système.Threading.Thread.CurrentThread.CurrentCulture

vous renvoie les informations de culture actuelles

0voto

munissor Points 2559

Vous pouvez enregistrer le fuseau horaire actuel (TimeZoneInfo.Local ou TimeZone.CurrentTimeZone, ils sont identiques mais le premier est préféré) avec vos horodatages.

Je pense que l'utilisateur devrait changer le fuseau horaire actuel à partir du panneau des propriétés de l'horloge de Windows.

0voto

user3671607 Points 142

Il me semble que l'application elle-même devrait obliger l'utilisateur à entrer le fuseau horaire à partir duquel il travaille actuellement afin d'obtenir un horodatage fiable par n'importe quel moyen. Je suppose qu'on peut demander cette information à la connexion. Bien que cela puisse devenir une nuisance pour l'utilisateur, s'attendre à ce que les utilisateurs mettent à jour leur fuseau horaire via une sorte de dialogue de paramètres optionnel relève de la fiction.

Si vous avez les ressources et que vous êtes assez audacieux, vous pourriez toujours obtenir le fuseau horaire en fonction de l'adresse IP de l'ordinateur à partir duquel ils accèdent au tunnel VPN, même si je ne pourrais même pas commencer à vous aider à le faire.

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