web-dev-qa-db-fra.com

Affichage des dates et de l'heure avec les informations de fuseau horaire localement pertinentes

Je spécifie des améliorations à un système qui devra rendre compte de l'activité des employés dans différents fuseaux horaires.

Je prévois que les utilisateurs du système pourront définir un fuseau horaire local ou local - et je pense que les rapports et l'interface utilisateur seront plus compréhensibles si l'utilisateur voit l'heure locale de l'événement, où que l'événement se produise.

Cependant, je ne veux pas masquer le fait que certaines heures appartiennent à un fuseau horaire différent. Supposons un instant que je souhaite afficher une heure de début à 09h00 pour l'employé A à Athènes en Grèce, l'employé B à Londres en Angleterre et l'employé C à New York aux États-Unis, et je suis à New York. Cet exemple utilise des décalages par rapport à New York

A:  09:00 +07:00
B:  09:00 +05:00
C:  09:00

Je crois que cette solution serait relativement facile à implémenter en utilisant les types DateTimeOffset dans Sql Server et .Net, mais je suis mal à l'aise à ce sujet car cela ressemble à un format ISO8601, mais ce n'est certainement pas cela, car les décalages horaires sont par rapport à New York, pas par rapport à UTC.

Peut-être qu'au lieu d'utiliser le décalage horaire, nous pourrions spécifier un fuseau horaire à la place:

A:  09:00 [EET]
B:  09:00 [UTC]
C:  09:00

Le problème que j'ai avec cette solution est que DateTimeOffset et autres ne stockent qu'un décalage horaire, et ne stockent pas ces informations de fuseau horaire ... et il peut être non trivial de découvrir dans quel fuseau horaire réel l'événement était plus tard ( considérer les changements d'heure d'été).

Gardez à l'esprit que l'employé A pourrait être à Athènes un jour et à Berlin le lendemain, et nous ne pouvons donc pas supposer que cela soit corrigé, ou décider d'exclure des données "non résidentielles" d'un rapport.

Bien que je sois plus intéressé par le format d'affichage, d'autres suggéreraient cette situation; une mise en garde est que la solution doit être assez facile à mettre en œuvre et rapide à traiter.

2
Nij

En fin de compte, le client a choisi de viser l'utilisation des abréviations de fuseau horaire là où elles sont nécessaires (c'est-à-dire pas dans le fuseau horaire actuel)

A:  09:00 [EET]
B:  09:00 [UTC]
C:  09:00

Bien que les utilisateurs de ce forum UX ne se soucient pas trop des détails de mise en œuvre, cela signifie que nous n'utiliserons pas DateTimeOffset comme type sous-jacent pour stocker les heures internationales. Nous avons décidé de stocker les heures locales, avec un TimeZoneId qui nous dira combien d'heures de l'heure UTC étaient. Cela rendra les comparaisons des temps absolus plus difficiles, mais fournira ce que nous pensons être un bon moyen "naturel" de voir le temps pour la majorité des éléments d'interface.

1
Nij

Les applications mobiles ont l'avantage d'utiliser des données de géolocalisation pour déterminer exactement où se trouve l'utilisateur, en convertissant les heures par rapport au fuseau horaire dans lequel elles se trouvent.

Avec les sites Web, la plupart du temps, vous voyez des options permettant aux utilisateurs d'indiquer expressément quel est leur fuseau horaire préféré. Il incombe à l'utilisateur de modifier son fuseau horaire s'il le souhaite.

Vous pouvez fournir une boucle de micro-interaction qui cherche à déterminer l'emplacement de l'utilisateur en fonction de son adresse IP. Si l'adresse se résout en dehors de leur fuseau horaire indiqué, vous pouvez fournir une petite info-bulle indiquant le problème potentiel: "Il semble que vous ne soyez pas actuellement dans [FUSEAU HORAIRE DE LA MAISON DÉCLARÉE]". Ensuite, proposez une résolution telle que "Changer l'heure en [FUSEAU HORAIRE ACTUEL]".

Voici un exemple d'infobulle de Gmail:

Gmail Tooltip

1
Hynes