Comment puis-je gérer les fuseaux horaires dans ma webapp?
Je suis à la recherche pour une meilleure compréhension de la suite du récit utilisateur:
Jean travaille en de Sidney. À 9:00 le matin, il enregistre un événement dans une application web qui s'exécute sur un serveur à Zurich. Le lendemain, il se rend à New York pour une réunion d'urgence dans laquelle l'événement doit être discuté. Au cours de la réunion, il est à la recherche pour les événements par date et heure.
Comme je le vois, il y a au moins deux questions se posent ici:
- Comment dois-je enregistrer le temps de timbres dans la base de données
- Comment dois-je présenter dans l'INTERFACE utilisateur
Quand Jean les recherches de l'événement, il va savoir que c'est arrivé à 9:00 mais que doit-il entrer dans le navigateur web? Il ne sera pas trouver quelque chose quand il n'entre dans "9:00" timestamp parce que peut-être Zurich ou, heure de New York (depuis l'événement n'a pas été trouvé, l'application n'a aucun moyen de savoir que c'est arrivé à Sidney, donc il ne peut pas automatiquement, sélectionnez le fuseau horaire correct).
Ce qui est un bon moyen de demander à l'utilisateur un timestamp qui peut inclure le fuseau horaire?
La deuxième question est comment faire pour afficher les résultats. Si des équipes de partout dans le monde besoin pour discuter de l'événement (et de trouver des événements, pensez à un pirate attaque qui cible plusieurs sites à travers le monde à la fois).
Ce qui est un bon exemple pour l'affichage des horodateurs qui ont été créés dans un autre fuseau horaire?
Remarque: Veuillez vous concentrer sur la facilité d'utilisation de l'exigence. Je peux comprendre la base de données de cartographie de moi-même. Actuellement, je ne suis pas sur le flux de travail. Il devrait demander/de présenter les informations nécessaires à un non-intrusives/manière intuitive. Si vous le pouvez, donnez un lien vers un site web existant application qui résout déjà présent.
- Un Débordement de pile résout ce problème en mettant tout en UTC. Pas toujours commode, mais il est certainement sans ambiguïté, pas difficile à mettre en œuvre et de travaux.
- UTC est tentant mais otoh, que, SI jamais besoin de synchroniser les événements sur plusieurs fuseaux horaires.
- Si vous passez la souris sur le temps à côté du commentaire, vous verrez que stackoverflow magasins, il est temps de la "Zulu" fuseau horaire. Je me demande si ils l'utilisent pour dire "les Candidatures pour le modérateur de la communauté se termine à 8 H, le 19 juin," et ils utilisent le fuseau horaire pour laisser les gens dans des fuseaux horaires différents voter jusqu'à ce que leurs respectifs 8 PMs?
- Non, ils ne le font pas. Il se termine à 8 H 19 juin UTC, et c'est la même chose avec toutes les dates sur un Débordement de Pile. (Aussi, Zoulou = UTC.)
- que pouvez-vous nous expliquer pourquoi l'utilisateur ne peut pas voir l'événement qui s'est passé à Sidney, après que toutes les données sont stockées dans zurich serveur?
- uDaY: a) l'utilisateur pourrait s'attendre à ce que l'ordinateur utilise Sidney fuseau horaire, même s'il est maintenant à New York (= utilisateur erreur de saisie), b), l'INTERFACE utilisateur peut ne pas avoir les contrôles nécessaires, c) les données ont pu être sauvés dans le format incorrect dans la DB. Remarque: Cette liste est incomplète. Il y a peut être plus de questions.
- Que faire si l'un de ces pays édicte la législation qui change, heure locale, après l'événement était prévu, mais avant que l'événement se produit? Comment le système gérer cela? en.wikipedia.org/wiki/...
- Question très intéressante, mais sans doute hors de portée; pouvez-vous s'il vous plaît poster une nouvelle question et de laisser un lien ici?
- Ce type de classique fuseau horaire question a été battu à mort pendant des décennies à travers l'internet et dans la presse, je suis surpris de voir une telle animé d'entrée et de primes sur cette question!
- Ma-je ajouter un point supplémentaire de complexité, en soulignant l'évidence, à savoir que la plupart du Monde de l'Ouest les changements de fuseaux horaires deux fois par an ("Heure"), et que les règles pour quand cela se produit ne sont ni uniformes à l'échelle mondiale, ni nécessairement trivial, algorithmiquement parlant?
Vous devez vous connecter pour publier un commentaire.
La question du stockage des horodateurs est simple: Stocker au format UTC.
Comme pour les afficher, il serait judicieux de prendre l'appareil du fuseau horaire et de l'utiliser comme le fuseau horaire actuel. Cela dit, il devrait y avoir un fuseau horaire menu déroulant à côté de "l'entrée" de la boîte, qui est par défaut le dispositif actuel de fuseau horaire, de sorte que l'utilisateur peut le modifier si nécessaire.
La majorité de vos utilisateurs ne sera probablement pas de changement de fuseaux horaires beaucoup, ou pas du tout. Pour la plupart, la situation que vous avez décrite est rare. Par la mise en œuvre d'une liste déroulante avec un défaut, vous devriez être en mesure de faire des choses assez facile pour ceux qui ne se déplacer (car ils ont généralement une meilleure compréhension des fuseaux horaires de non-voyageur).
En fait, il serait encore mieux d'enregistrer le fuseau horaire de l'appareil a été réglé lors de votre app a été la première exécution, et ensuite voir si il ne change jamais. En cas de modification, l'utilisateur est probablement un voyageur et aurait sans doute l'avantage d'avoir la zone de liste déroulante. Sinon, il suffit de ne pas afficher la liste déroulante et par défaut de l'appareil fuseau horaire (parce que l'utilisateur n'a pas besoin de les connaître). Dans les deux cas, un paramètre dans le app qui permet à l'utilisateur manuellement afficher/masquer la zone de liste déroulante.
Pour résumer ce qui précède:
Dans nos applications, nous sommes généralement en magasin le fuseau horaire de l'utilisateur, lors de notre première registres, comme souvent vu sur les sites de forum, et toujours afficher l'heure, le fuseau horaire.
Comme pour stocker la date, l'heure UTC est le chemin à parcourir. Convertir à l'UTC et le coller dans la base de données. Lors de la récupération, il suffit de convertir l'heure du fuseau horaire défini pour l'utilisateur.
J'ai eu à résoudre un usage similaire de cas, où des notifications personnalisées, comme "Happy New year", pourrait être envoyé à tous les utilisateurs de l'application web. Puisque les utilisateurs sont répartis dans le monde entier, nous nécessaire à l'affichage de la notification selon le fuseau horaire. Stocker le timestamp au format UTC bien servi notre but, sans hoquet.
Dans votre cas, si vous n'êtes pas le stockage de l'utilisateur fuseau horaire, quelque part, vous ne serez jamais en mesure de retourner les résultats de la recherche, sans avoir à demander la saisie de l'utilisateur, sauf si vous démarrez à l'aide de la détection de l'emplacement, comme gmaps, mais qui n'est pas fiable. De sorte que vous aurez besoin de demander le fuseau horaire à chaque fois pour s'assurer que l'utilisateur sait ce qu'il est d'entrer dans le site web.
Si vous avez des informations sur le fuseau horaire, l'ensemble de l'application web doit être exécuté avec le paramètre de fuseau horaire. C'est pourquoi, lorsque l'utilisateur n'recherche pour 9:00, il va être à la recherche à Sydney le fuseau horaire. D'autre part, s'il crée un événement tout en siégeant à New York, il va créer l'événement avec le Sydney fuseau horaire. Nous avons résoudre de tels cas, toujours l'affichage de fuseau horaire lors de l'affichage des dates.
Espère que cela aide! 🙂
UTC. Garder les choses simples.
Utiliser le fuseau horaire qui est le plus pertinent pour l'utilisateur.
Si vous connaissez l'utilisateur va être dans ou à destination de Sydney pour l'événement, alors ils seront pensée dans ce fuseau horaire lors de l'organisation des transports à l'événement. Le fait qu'ils sont actuellement à New York, est largement hors de propos. Et bien sûr, si votre application dates de spectacles dans divers fuseaux horaires, il faut toujours montrer le fuseau horaire à côté de la date, par exemple 09:00 HNE.
Si ce n'est pas l'encombrement de votre interface trop, vous pourriez afficher les dates dans le cas de fuseau horaire et de fuseau horaire local, par exemple 2012-06-13 09:00 est (2012-06-12 19:00 HAE).
Je dirais que la recherche est un problème similaire, avec une mise en garde: nous ne pouvons tolérer de faux positifs (l'obtention d'un résultat l'on n'attendait pas), mais on ne supporte pas de faux négatifs (pas d'obtenir un résultat qui nous attendait).
Encore une fois, j'avais l'accent sur la recherche la plus pertinente fuseau horaire de l'utilisateur (par exemple, l'événement fuseau horaire), et de donner à ces résultats en priorité dans les résultats de recherche, mais vous pouvez également retourner les événements qui correspondent dans d'autres fuseaux horaires qui sont pertinentes pour l'utilisateur (par exemple, heure locale). Si vous faites cela, vous devez afficher la date de l'événement dans le fuseau horaire correspondant, surtout si vous mettez en surbrillance le texte correspondant.
Ici, je suis en train de donner des suggestions pour une meilleure convivialité, sans se soucier beaucoup sur la mise en œuvre de faisabilité.
1. Pour le premier numéro de stocker des événements en db, tout le monde serait d'accord de le stocker dans UTC
2. Pour donner la meilleure expérience utilisateur, d'enregistrer l'histoire de fuseau horaire de l'utilisateur. Si vous pouviez enregistrer le timestamp de l'heure de changement de zone, encore mieux. Cela va nous permettre de donner la liberté à l'utilisateur d'interroger sans spécifier le fuseau horaire explicitement à chaque fois.
3.Ce qui est un bon moyen de demander à l'utilisateur un timestamp qui peut inclure le fuseau horaire?
4.Comment afficher les résultats, si des équipes de partout dans le monde besoin pour discuter de l'événement:
Ces suggestion sont donnés avec l'intention que l'utilisateur n'a pas besoin de faire tout calcul de l'heure locale, mais en même il devrait être en mesure de communiquer avec d'autres utilisateurs couramment dans leur moment préféré de la zone.
Ok j'ai eu une approche différente de celle des autres:
Tout d'abord, j'ai pris quelques petites choses avant de la main.
Personne qui est l'inscription de l'événement a smartphone(si c'est un navigateur, je n'ai pas à faire de ces hypothèses) avec:
GPS
HTML5 capacité.
Javascript
Solution: Évidemment UTC, j'ai superposé la procédure ci-dessous:
L'étape 1. Utiliser le Géolocalisation de l'utilisateur à l'aide de l'API de Géolocalisation
L'étape 2. Donner le (Long,Lat) comme arguments pour certains (Lat,Long) au Fuseau horaire de l'api comme le API Yahoo (use R pour obtenir la Latitude converti au Fuseau horaire) pour obtenir les utilisateurs fuseau horaire.
=> Les utilisateurs fuseau horaire est déterminé sans intervention de l'utilisateur ( je suis en utilisant ce parce que vous ne pouvez pas vous contenter de supposer que l'utilisateur connaît le fuseau horaire de l'endroit où il vit, je savais que mon fuseau horaire seulement après quelques mois ou quelque chose à la place :P, stupide!)
La chaque table d'Événement a
Timezone
,Event
& donc, peut également avoirCityName
Puis créer une autre table de base de données avec une classification basée sur
CityName
s. Donc, ici, l'utilisateur dispose de deux colonnes=> utilisez Google Calendrier de l'API ou de certains de le Calendrier de l'API de
Des Lectures Connexes:
Déterminer le fuseau horaire à partir de la latitude/longitude, sans l'aide de services web comme Geonames.org
Le fuseau horaire de recherche à partir de la latitude longitude
Je sais que sa fait de montrer une idée de comment résoudre ce problème. Mais voir comment exacte & lumière-poids, il devient sur les utilisateurs lorsque le Fuseau horaire est déterminé à l'aide de appareil Api
Espère que cela aide!
new Date().getTimezoneOffset()
la donne en minutes de retard sur l'heure UTC.Pour ce cas particulier, je voudrais stocker les deux locale et l'heure UTC. L'UTC est un peu grandes et utilisé pour la synchronisation et la conversion de temps à l'heure actuelle de la zone. Local est utilisé pour les recherches et pour plus d'info, comme:
Vous avez une réunion:
ou quelque chose comme ça. L'autre façon est de stocker moment de la création de la zone, et de les convertir au moment de l'exécution (c'est particulièrement le mieux dans le cas où l'utilisateur va changer l'heure de la réunion). De toute façon, la raison principale est d'être capable de restaurer l'origine de la création de temps de sorte que l'utilisateur peut se référer à elle.
À la création d'événements, je voudrais stocker l'heure UTC et l'heure locale (aka
creation time zone
). Je voudrais utiliser ce que j'ai stocké pour convertir l'heure UTC en heure locale (akacreation time
) et de le stocker à côté de l'heure UTC etcreation time zone
.NOTE: je peux stocker, heure locale, à partir de l'obtenir-aller, mais lorsque l'utilisateur effectue une recherche pour un événement, je l'espère, une conversion en heure locale existe. J'espère aussi que le serveur détecte l'horaire, le client est en.
Lorsqu'un utilisateur recherche "9:00", je recherche des événements qui incluent "9:00" à l'UTC OU
creation time
OU heure locale. Pour les résultats, je voudrais afficher un tableau de résultats danscreation time
(Ce qui est destiné à afficher les informations d'horodatage qui peuvent avoir été créé dans un fuseau horaire différent, comme nous le supposons que l'utilisateur est à la recherche de ce temps, il a créé un événement là où il était.), et l'affichage d'un second tableau de résultats ci-dessous, des résultats, peut-être avec l'en-tête, "non Pas ce que vous cherchez? Voir les résultats" (ceux-ci comprennent les restes de l'heure UTC et l'heure locale de résultats).Globalement, je l'affichage de l'heure UTC, heure locale, le
creation time
, et lacreation time zone
(c'est à dire l'heure locale et le fuseau horaire de l'événement où il a été créé) triées par rapport à l'heure UTC, de sorte que vous pouvez voir l'événement qui vient en premier, en cas de deux événements différents ont été prévus pour le 9:00 dans deux fuseaux horaires différents.BETWEEN
conditions).