Fuseaux horaires en Java
Je suis en permettant aux utilisateurs sur mon application web de planifier des événements, selon l'heure les zones de leur choix.
Je tiens à vous présenter une bonne liste de fuseaux horaires pour l'utilisateur final, et ensuite de les convertir facilement pour java.util.TimeZone
objet à la fin du serveur.
String[] TimeZone.getAvailableIds()
est quelque chose que je pourrais utiliser, mais le problème est qu'il imprime environ 585 fuseau horaire id.
Quelle est la meilleure façon de les présenter à l'utilisateur une brève liste de fuseaux horaires (comme une boîte de Windows serait pour les paramètres de fuseau horaire) et facilement convertir au Fuseau horaire de l'objet à la fin de serveur à l'aide de son id?
- Comme une référence, Wikipedia garde un liste des noms de fuseau horaire.
Vous devez vous connecter pour publier un commentaire.
La liste des fuseaux horaires est très d'application et les paramètres régionaux spécifiques. Une fois que vous savez quelles zones sont les plus pertinentes à vos utilisateurs. Nous avons des listes différentes pour différentes régions.
Voici notre liste pour les utilisateurs aux états-unis pour votre référence,
Je viens d'écrire un petit utilitaire Java qui fournit une liste de fuseaux horaires Windows (dans les zones du temps de sélection de la zone de dialogue de Windows), et leurs associés Java Fuseau horaire objets. Voir https://github.com/nfergu/Java-Time-Zone-List
Ceci est basé sur la CLDR mappages à http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml
Vous pouvez réduire la liste à TZ Id qui correspond seulement à la suite de regexp
Juste pour compléter la réponse par tbruyelle j'ai ajouté un peu plus de pays (par exemple le Canada), enlevé le "/" partie du filtre et a fourni un moyen pour trier la liste.
Si vous avez besoin de la granularité de choisir exactement comment la liste regarder, je voudrais utiliser la meilleure liste codée en dur que j'ai pu trouver (c'est un bon exemple) et de s'assurer qu'il est affiché et converti aussi précisément que possible.
Il suffit de garder à l'esprit que chacun de ceux 585 fuseaux horaires n'ont une signification sémantique (comme l'heure d'été par exemple) et les utilisateurs peuvent choisir la meilleure zone de temps pour eux. Même si je suis d'accord que la liste peut être beaucoup plus courte.
Ne pourriez-vous pas utiliser une liste de fuseau horaire personnalisé Id à l'aide de "GMT +/- Heures" notation (en ignorant les minutes)?
(EDIT: Avec ma première suggestion, de l'heure de la transition n'est pas automatique. Pour résoudre ce problème, vous pouvez d'abord demander à l'utilisateur de sélectionner un décalage horaire et de montrer ensuite un (liée) à la liste de fuseau horaire IDs pour l'offset donné à l'aide de:
De cette façon, l'utilisateur sera en mesure de choisir son fuseau horaire dans un plus courte liste (meilleur pour l'expérience utilisateur) et de bénéficier de la lumière du jour les comportements d'épargne.)
Je l'ai fait pour une entreprise je n'ai pas un de plus, ne peut donc pas fournir le code. La JVM sur Windows est livré avec un fichier appelé
tzmappings
(regarder dansC:\Program Files\Java\jre6\lib
ou similaire) cartes Windows fuseaux horaires de Java zoneinfo à base Continent/forme de la Ville.Malheureusement, le texte des noms dans
tzmappings
sont terribles, de sorte que vous besoin de faire quelques minutes de tabulation. Ouvrez regedit et accédez àHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
. En vertu de la présente est une clé pour chaque fuseau horaire sur l'ordinateur; Windows 7 a environ 90. Chaque clé a une valeur appeléeDisplay
qui est le nom textuel que vous voulez, recherchez la clé elle-même danstzmappings
pour trouver la Java temps identificateur de la zone par chacun d'eux.Avec qui beaucoup, je n'essaierais pas de chausse-pied dans une boîte de sélection de la liste.... Je l'avais mis sur une liste dans une autre boîte de dialogue modale (ou pop-up, si vous devez), permettent à l'utilisateur de faire défiler et cliquez sur le nom qu'ils veulent. Ils auraient cliquez sur un lien dans la boîte de dialogue modale, et il serait de remplir un champ de texte avec le bon code, et vous pouvez ensuite soumettre à votre serveur.
Mieux encore, demandez-leur de cliquer sur leur emplacement sur une carte du monde, et l'utilisation d'une carte-image à traduire cet emplacement pour le fuseau horaire approprié.