I've written an Android app that needs the short timezone name in which the handset is currently located.
I'm using the following code:
String timeZone = Calendar.getInstance().getTimeZone().getDisplayName(false, TimeZone.SHORT);
When running in Chicago, this returns "CST". In New York, "EST". In Strasbourg, France, it's returning "HNEC" (Heure Normale de l'Europe Centrale in French).
The timezone in this location is referred to by some as "Central European Time" (see Wikipedia's Time zones of Europe).
I'm passing timeZone
off to a third-party system which very much insists on getting "CET" (not "HNEC"). Is there an API call I can rely on to return the three-letter (and, I think, "more modern") short timezone name?
As my code runs in more and more locations, I'm guessing this problem is going to occur elsewhere, too.
I'm really hoping to avoid maintaining some sort of map of three-letter to four-letter short timezone names.
I'm sorry, but you're probably stuck maintaining a mapping. The three-character are actually the older, not more modern version. From the classdocs:
If it were my problem, I'd get the list my third-party system supports and map it.
You could just use SimpleDateFormat to print the time zone in three letters or full name. For example:
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());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With