In many time zones, they switched time zones and therefore changed the time zone names. For example, the following is the history of Asia/Singapore.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Singapore 6:55:24 - LMT 1880
6:55:24 - SMT 1905 Jun # Singapore Mean Time
7:00 - MALT 1933 # Malaya Time
7:20 - MALT 1942 Feb 15
9:00 - JST 1945 Sep 2
7:20 - MALT 1950
7:30 - MALT 1965 Aug 9 # independence
7:30 - SGT 1982 May # Singapore Time
8:00 - SGT
The TimeZone class can't deal with these name changes.
Currently, timezone abbreviations are stored in java.text.resources.DateFormatZoneData<locale>. Therefore, timezone abbreviations unknown to a locale are not shown in the locale. Timezone abbreviations should not be dependent on a locale. (Timezone names should still be localizable.)
Each timezone data should contain its abbrevinations.
Historical time zone name changes can't be supported under the current structure of time zone data and display name resources. Also resources could be organized more efficiently. For example, if a time zone database holds an English name (e.g., "Pacific Standard Time"), each localization should have only its translation with the English name as a key. Currently, each time zone ID has a set of translated names, which structure requires duplicates. Note that an abbreviation can't be a unique key. Probably it's necessary to have a pair of long and abbreviation names under a long name key.