Question

I need to map IANA/Olson timezone id to abbreviations, like EST, PST, etc.

I understand that this is not 1-to-1 mapping and that, for example, for EST there are quite a bunch of IANA timezones.

Is there some kind of database/mapping I can use for this?

PS: JavaScript solution is preferable, but any info that could help me to build this mapping (IANA timezone id -> abbreviation) is appreciated.

Was it helpful?

Solution

The IANA TZDB source data does have abbreviations already, but they have to be computed for the date in question. You can see it in the example data here, in the Zone.FORMAT and Rule.LETTER/S columns.

Since time zone abbreviations like CST can be ambiguous, it is only recommended you use them for display to a human. Never attempt to use them going the other direction, because only a few will be recognized by most implementations, and they tend to be valid only for the USA.

Since you asked for code that could do this for you, look at the bottom half of the code in my answer of how to do this using Noda Time in .Net. (The top half is about translating from a Windows zone to an IANA zone first, which you don't need.)

You could look at one of the several TZDB libraries for JavaScript, but I'm not sure if any directly expose the abbreviation data or not. Besides, that's a bit heavy for something so small.

OTHER TIPS

In java with joda-time, we can get time-zone abbreviation from iana id as below

DateTimeZone dz = DateTimeZone.forID("America/New_York");
String tzid = dz.getShortName(DateTimeUtils.currentTimeMillis());
//tzid will be 'EST'

String longerTimeZoneName = dz.getName(DateTimeUtils.currentTimeMillis());
//longerTimeZoneName  will be 'Eastern Standard Time'
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top