2010-05-10 7 views
4

J'ai écrit une application Android qui nécessite le nom court de fuseau horaire dans lequel le combiné est actuellement situé.Obtenez un nom de fuseau horaire court à trois lettres (par opposition à quatre lettres)?

J'utilise le code suivant:

String timeZone = Calendar.getInstance().getTimeZone().getDisplayName(false, TimeZone.SHORT); 

Lors de l'exécution à Chicago, retourne "CST". À New York, "EST". Dans Strasbourg, France, il renvoie "HNEC" (Heure Normale de l'Europe Centrale in French).

Le fuseau horaire de cet endroit est appelé "Heure d'Europe centrale" (voir le Time zones of Europe de Wikipedia).

Je passe timeZone à un système tiers qui insiste beaucoup pour obtenir "CET" (pas "HNEC"). Y a-t-il un appel d'API sur lequel je peux compter pour retourner le nom de fuseau horaire à trois lettres (et, je pense, "plus moderne")?

Comme mon code s'exécute dans de plus en plus d'endroits, je suppose que ce problème va se produire ailleurs, aussi. Je souhaite vraiment éviter de conserver une sorte de carte de noms de fuseau horaire courts de trois lettres à quatre lettres.

Répondre

6

Je suis désolé, mais vous êtes probablement bloqué en maintenant un mappage. Les trois caractères sont en fait la version la plus ancienne, pas plus moderne. A partir des classdocs:

    Pour la compatibilité avec JDK 1.1.x, certains autres ID de fuseau horaire à trois lettres (tels que "PST", "CTT", "AST") sont également pris en charge. Cependant, leur utilisation est obsolète parce que la même abréviation est souvent utilisée pour plusieurs fuseaux horaires (par exemple, "CST" pourrait être US "Central Standard Time" et "China Standard Time"), et la plate-forme Java ne peut alors reconnaître l'un d'eux.

Si c'était mon problème, j'obtiendrais la liste que mon système tiers prend en charge et mapper.

+1

Comment obtenir l'abréviation de mobile timezone dans android? Y a-t-il du travail autour? –

+0

s'il vous plaît vérifier ma réponse. –

0

Vous pouvez simplement utiliser SimpleDateFormat pour imprimer le fuseau horaire en trois lettres ou le nom complet. Par exemple:

DateFormat getTimeZoneShort = new SimpleDateFormat("z", Locale.US); 
String timeZoneShort = getTimeZoneShort.format(Calendar.getInstance().getTime()); 

DateFormat getTimeZoneLong = new SimpleDateFormat("zzzz", Locale.US); 
String timeZoneLong = getTimeZoneLong.format(Calendar.getInstance().getTime());