J'ai un problème bizarre avec Java TimeZone ..
L'appel TimeZone.getDefault () donne mon fuseau horaire local, qui a un ID "GMT + 02: 00". Ce qui est drôle, c'est que cet ID n'apparaît pas dans une liste fournie par TimeZone.getAvailableIDs (). Apparemment, ma zone semble être "Etc/GMT + 2".
J'essaie de remplir un combo avec des fuseaux horaires, mais il est impossible de mettre une sélection car GMT + 02: 00 n'est pas dans la liste. Quelqu'un a vu ce problème? Des idées?
Mettre à jour:
L'essentiel est - ne peut pas compter sur les chaînes d'ID, doit aller avec le décalage car les ID d'affichage peuvent varier d'un système à l'autre.
En repensant à d'autres SO questions, cela semble être un problème Java-sur-Windows. Veuillez consulter cet article , en particulier la réponse 1, qui pointe vers un lien wikipedia qui peut résoudre votre problème de cartographie.
GMT + 02: 00 est un ID personnalisé, il n'apparaîtra pas dans la sortie de TimeZone.getAvailableIDs()
(qui est énorme). Ce que vous pourriez faire, c'est de demander à l'utilisateur de spécifier son décalage d'abord, puis d'obtenir les ID disponibles pour le décalage donné. Par exemple, pour GMT + 02: 00, le code suivant:
for (String string : TimeZone.getAvailableIDs(TimeZone.getTimeZone(
"GMT+02:00").getRawOffset())) {
System.out.println(string);
}
donne la sortie suivante:
ART Afrique/Blantyre Afrique/Bujumbura Afrique/Le Caire Afrique/Gaborone Afrique/Harare Afrique/Johannesburg Afrique/Kigali Afrique/Lubumbashi Afrique/Lusaka Afrique/Maputo Afrique/Maseru Afrique /Mbabane[.____. E5EAfrica/Tripoli[.____. Asie/Jérusalem Asie/Nicosie Asie/Tel_Aviv CAT EET Égypte Etc/GMT -2 Europe/Athènes Europe/Bucarest Europe/Chisinau Europe/Helsinki Europe/Istanbul Europe/Kaliningrad Europe/Kiev Europe/Mariehamn Europe/Minsk Europe/Nicosie Europe/Riga Europe/Simferopol Europe/Sofia Europe/Tallinn Europe/Tiraspol Europe/Oujgorod Europe/Vilnius Europe/Zaporozhye Israël Libye Turquie
C'est encore gros mais humainement navigable cette fois.
Le temps Joda a une constante DateTimeZone.UTC
. Cette classe ou constante pourrait vous être utile. http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTimeZone.html
MISE À JOUR Java 8
Java 8 a également maintenant ZoneOffset.UTC
: https://docs.Oracle.com/javase/8/docs/api/Java/time/ZoneOffset.html#UTC
Que diriez-vous d'utiliser TimeZone.getAvailableIDs () et de les regrouper par la partie avant la barre oblique et d'en faire une sélection en deux étapes?
Tout fuseau horaire peut être spécifié comme "GMT" plus/moins un décalage. Le doc fuseau horaire fait référence à cela comme un "ID personnalisé".
Pour remplir un menu déroulant, je pense que vous feriez mieux de proposer une liste spécifique de villes/décalages, avec une association au fuseau horaire. Le tableau retourné par getAvailableIDs()
est énorme - 586 entrées dans mon installation - et vous ne voulez certainement pas forcer vos utilisateurs à parcourir cela.