From 1ea8e73b809603d2c182b20899ca7824bd0d0209 Mon Sep 17 00:00:00 2001 From: Ingo Proetel Date: Thu, 18 Sep 2003 06:34:00 +0000 Subject: [PATCH] TimeZone.java: Initialize lazily. 2003-09-18 Ingo Proetel * java/util/TimeZone.java: Initialize lazily. * java/util/Locale.java (readManifest): Fix check for country. * java/util/GregorianCalendar.java: Make use of ResourceBundle better traceable * java/util/Calendar.java: Make use of ResourceBundle better traceable. From-SVN: r71509 --- libjava/ChangeLog | 9 + libjava/java/util/Calendar.java | 19 +- libjava/java/util/GregorianCalendar.java | 14 +- libjava/java/util/Locale.java | 2 +- libjava/java/util/TimeZone.java | 1386 +++++++++++----------- 5 files changed, 736 insertions(+), 694 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 0ba824b0a29..f023cfc9b31 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,12 @@ +2003-09-18 Ingo Proetel + + * java/util/TimeZone.java: Initialize lazily. + * java/util/Locale.java (readManifest): Fix check for country. + * java/util/GregorianCalendar.java: Make use of ResourceBundle better + traceable + * java/util/Calendar.java: Make use of ResourceBundle better + traceable. + 2003-09-18 Jeroen Frijters * java/sql/Timestamp.java diff --git a/libjava/java/util/Calendar.java b/libjava/java/util/Calendar.java index 9a4e21f69de..271d1d163c6 100644 --- a/libjava/java/util/Calendar.java +++ b/libjava/java/util/Calendar.java @@ -361,10 +361,20 @@ public abstract class Calendar implements Serializable, Cloneable static final long serialVersionUID = -1807547505821590642L; /** - * The name of the resource bundle. + * The name of the resource bundle. Used only by getBundle() */ private static final String bundleName = "gnu.java.locale.Calendar"; + /** + * get resource bundle: + * The resources should be loaded via this method only. Iff an application + * uses this method, the resourcebundle is required. + */ + private static ResourceBundle getBundle(Locale locale) + { + return ResourceBundle.getBundle(bundleName, locale); + } + /** * Constructs a new Calendar with the default time zone and the default * locale. @@ -385,7 +395,7 @@ public abstract class Calendar implements Serializable, Cloneable this.zone = zone; lenient = true; - ResourceBundle rb = ResourceBundle.getBundle(bundleName, locale); + ResourceBundle rb = getBundle(locale); firstDayOfWeek = ((Integer) rb.getObject("firstDayOfWeek")).intValue(); minimalDaysInFirstWeek = @@ -430,7 +440,7 @@ public abstract class Calendar implements Serializable, Cloneable public static synchronized Calendar getInstance(TimeZone zone, Locale locale) { String calendarClassName = null; - ResourceBundle rb = ResourceBundle.getBundle(bundleName, locale); + ResourceBundle rb = getBundle(locale); calendarClassName = rb.getString("calendarClass"); if (calendarClassName != null) { @@ -461,8 +471,7 @@ public abstract class Calendar implements Serializable, Cloneable */ public static synchronized Locale[] getAvailableLocales() { - ResourceBundle rb = ResourceBundle.getBundle(bundleName, - new Locale("", "")); + ResourceBundle rb = getBundle(new Locale("", "")); return (Locale[]) rb.getObject("availableLocales"); } diff --git a/libjava/java/util/GregorianCalendar.java b/libjava/java/util/GregorianCalendar.java index b01d971edca..91f5890ef06 100644 --- a/libjava/java/util/GregorianCalendar.java +++ b/libjava/java/util/GregorianCalendar.java @@ -78,10 +78,20 @@ public class GregorianCalendar extends Calendar static final long serialVersionUID = -8125100834729963327L; /** - * The name of the resource bundle. + * The name of the resource bundle. Used only by getBundle() */ private static final String bundleName = "gnu.java.locale.Calendar"; + /** + * get resource bundle: + * The resources should be loaded via this method only. Iff an application + * uses this method, the resourcebundle is required. --Fridi. + */ + private static ResourceBundle getBundle(Locale locale) + { + return ResourceBundle.getBundle(bundleName, locale); + } + /** * Constructs a new GregorianCalender representing the current * time, using the default time zone and the default locale. @@ -120,7 +130,7 @@ public class GregorianCalendar extends Calendar public GregorianCalendar(TimeZone zone, Locale locale) { super(zone, locale); - ResourceBundle rb = ResourceBundle.getBundle(bundleName, locale); + ResourceBundle rb = getBundle(locale); gregorianCutover = ((Date) rb.getObject("gregorianCutOver")).getTime(); setTimeInMillis(System.currentTimeMillis()); } diff --git a/libjava/java/util/Locale.java b/libjava/java/util/Locale.java index 431824f0c35..06867fb020c 100644 --- a/libjava/java/util/Locale.java +++ b/libjava/java/util/Locale.java @@ -489,7 +489,7 @@ public final class Locale implements Serializable, Cloneable + "WS,YE,YT,YU,ZA,ZM,ZR,ZW") .indexOf(country); - if (index % 3 != 0 || language.length() != 2) + if (index % 3 != 0 || country.length() != 2) throw new MissingResourceException ("Can't find ISO3 country for " + country, "java.util.Locale", country); diff --git a/libjava/java/util/TimeZone.java b/libjava/java/util/TimeZone.java index 6d4493001f6..db9ff6b1051 100644 --- a/libjava/java/util/TimeZone.java +++ b/libjava/java/util/TimeZone.java @@ -80,695 +80,709 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable /** * The default time zone, as returned by getDefault. */ - private static TimeZone defaultZone; + private static TimeZone defaultZone0; + /* initialize this static field lazily to overhead if + * it is not needed: + */ + private static synchronized TimeZone defaultZone() { + /* Look up default timezone */ + if (defaultZone0 == null) + { + if (Configuration.INIT_LOAD_LIBRARY) + { + System.loadLibrary("javautil"); + } + String tzid = System.getProperty("user.timezone"); + + if (tzid == null) + tzid = getDefaultTimeZoneId(); + + if (tzid == null) + tzid = "GMT"; + + defaultZone0 = getTimeZone(tzid); + } + return defaultZone0; + } + private static final long serialVersionUID = 3581463369166924961L; /** * Hashtable for timezones by ID. */ - private static final Hashtable timezones = new Hashtable(); - - static - { - TimeZone tz; - // Automatically generated by scripts/timezones.pl - // XXX - Should we read this data from a file? - tz = new SimpleTimeZone(-11000 * 3600, "MIT"); - timezones.put("MIT", tz); - timezones.put("Pacific/Apia", tz); - timezones.put("Pacific/Midway", tz); - timezones.put("Pacific/Niue", tz); - timezones.put("Pacific/Pago_Pago", tz); - tz = new SimpleTimeZone - (-10000 * 3600, "America/Adak", - Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("America/Adak", tz); - tz = new SimpleTimeZone(-10000 * 3600, "HST"); - timezones.put("HST", tz); - timezones.put("Pacific/Fakaofo", tz); - timezones.put("Pacific/Honolulu", tz); - timezones.put("Pacific/Johnston", tz); - timezones.put("Pacific/Rarotonga", tz); - timezones.put("Pacific/Tahiti", tz); - tz = new SimpleTimeZone(-9500 * 3600, "Pacific/Marquesas"); - timezones.put("Pacific/Marquesas", tz); - tz = new SimpleTimeZone - (-9000 * 3600, "AST", - Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("AST", tz); - timezones.put("America/Anchorage", tz); - timezones.put("America/Juneau", tz); - timezones.put("America/Nome", tz); - timezones.put("America/Yakutat", tz); - tz = new SimpleTimeZone(-9000 * 3600, "Pacific/Gambier"); - timezones.put("Pacific/Gambier", tz); - tz = new SimpleTimeZone - (-8000 * 3600, "PST", - Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("PST", tz); - timezones.put("PST8PDT", tz); - timezones.put("America/Dawson", tz); - timezones.put("America/Los_Angeles", tz); - timezones.put("America/Tijuana", tz); - timezones.put("America/Vancouver", tz); - timezones.put("America/Whitehorse", tz); - timezones.put("US/Pacific-New", tz); - tz = new SimpleTimeZone(-8000 * 3600, "Pacific/Pitcairn"); - timezones.put("Pacific/Pitcairn", tz); - tz = new SimpleTimeZone - (-7000 * 3600, "MST", - Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("MST", tz); - timezones.put("MST7MDT", tz); - timezones.put("America/Boise", tz); - timezones.put("America/Chihuahua", tz); - timezones.put("America/Denver", tz); - timezones.put("America/Edmonton", tz); - timezones.put("America/Inuvik", tz); - timezones.put("America/Mazatlan", tz); - timezones.put("America/Shiprock", tz); - timezones.put("America/Yellowknife", tz); - tz = new SimpleTimeZone(-7000 * 3600, "MST7"); - timezones.put("MST7", tz); - timezones.put("PNT", tz); - timezones.put("America/Dawson_Creek", tz); - timezones.put("America/Hermosillo", tz); - timezones.put("America/Phoenix", tz); - tz = new SimpleTimeZone - (-6000 * 3600, "CST", - Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("CST", tz); - timezones.put("CST6CDT", tz); - timezones.put("America/Cambridge_Bay", tz); - timezones.put("America/Cancun", tz); - timezones.put("America/Chicago", tz); - timezones.put("America/Menominee", tz); - timezones.put("America/Merida", tz); - timezones.put("America/Mexico_City", tz); - timezones.put("America/Monterrey", tz); - timezones.put("America/Rainy_River", tz); - timezones.put("America/Winnipeg", tz); - tz = new SimpleTimeZone(-6000 * 3600, "America/Belize"); - timezones.put("America/Belize", tz); - timezones.put("America/Costa_Rica", tz); - timezones.put("America/El_Salvador", tz); - timezones.put("America/Guatemala", tz); - timezones.put("America/Managua", tz); - timezones.put("America/Regina", tz); - timezones.put("America/Swift_Current", tz); - timezones.put("America/Tegucigalpa", tz); - timezones.put("Pacific/Galapagos", tz); - tz = new SimpleTimeZone - (-6000 * 3600, "Pacific/Easter", - Calendar.OCTOBER, 9, -Calendar.SUNDAY, 0 * 3600, - Calendar.MARCH, 9, -Calendar.SUNDAY, 0 * 3600); - timezones.put("Pacific/Easter", tz); - tz = new SimpleTimeZone - (-5000 * 3600, "America/Grand_Turk", - Calendar.APRIL, 1, Calendar.SUNDAY, 0 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600); - timezones.put("America/Grand_Turk", tz); - timezones.put("America/Havana", tz); - tz = new SimpleTimeZone(-5000 * 3600, "EST5"); - timezones.put("EST5", tz); - timezones.put("IET", tz); - timezones.put("America/Bogota", tz); - timezones.put("America/Cayman", tz); - timezones.put("America/Eirunepe", tz); - timezones.put("America/Guayaquil", tz); - timezones.put("America/Indiana/Indianapolis", tz); - timezones.put("America/Indiana/Knox", tz); - timezones.put("America/Indiana/Marengo", tz); - timezones.put("America/Indiana/Vevay", tz); - timezones.put("America/Indianapolis", tz); - timezones.put("America/Iqaluit", tz); - timezones.put("America/Jamaica", tz); - timezones.put("America/Lima", tz); - timezones.put("America/Panama", tz); - timezones.put("America/Pangnirtung", tz); - timezones.put("America/Port-au-Prince", tz); - timezones.put("America/Porto_Acre", tz); - timezones.put("America/Rankin_Inlet", tz); - tz = new SimpleTimeZone - (-5000 * 3600, "EST", - Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("EST", tz); - timezones.put("EST5EDT", tz); - timezones.put("America/Detroit", tz); - timezones.put("America/Kentucky/Louisville", tz); - timezones.put("America/Kentucky/Monticello", tz); - timezones.put("America/Louisville", tz); - timezones.put("America/Montreal", tz); - timezones.put("America/Nassau", tz); - timezones.put("America/New_York", tz); - timezones.put("America/Nipigon", tz); - timezones.put("America/Thunder_Bay", tz); - tz = new SimpleTimeZone(-4000 * 3600, "PRT"); - timezones.put("PRT", tz); - timezones.put("America/Anguilla", tz); - timezones.put("America/Antigua", tz); - timezones.put("America/Aruba", tz); - timezones.put("America/Barbados", tz); - timezones.put("America/Boa_Vista", tz); - timezones.put("America/Caracas", tz); - timezones.put("America/Curacao", tz); - timezones.put("America/Dominica", tz); - timezones.put("America/Grenada", tz); - timezones.put("America/Guadeloupe", tz); - timezones.put("America/Guyana", tz); - timezones.put("America/La_Paz", tz); - timezones.put("America/Manaus", tz); - timezones.put("America/Martinique", tz); - timezones.put("America/Montserrat", tz); - timezones.put("America/Port_of_Spain", tz); - timezones.put("America/Porto_Velho", tz); - timezones.put("America/Puerto_Rico", tz); - timezones.put("America/Santo_Domingo", tz); - timezones.put("America/St_Kitts", tz); - timezones.put("America/St_Lucia", tz); - timezones.put("America/St_Thomas", tz); - timezones.put("America/St_Vincent", tz); - timezones.put("America/Tortola", tz); - tz = new SimpleTimeZone - (-4000 * 3600, "America/Asuncion", - Calendar.OCTOBER, 1, Calendar.SUNDAY, 0 * 3600, - Calendar.FEBRUARY, -1, Calendar.SUNDAY, 0 * 3600); - timezones.put("America/Asuncion", tz); - tz = new SimpleTimeZone - (-4000 * 3600, "America/Cuiaba", - Calendar.OCTOBER, 2, Calendar.SUNDAY, 0 * 3600, - Calendar.FEBRUARY, 3, Calendar.SUNDAY, 0 * 3600); - timezones.put("America/Cuiaba", tz); - tz = new SimpleTimeZone - (-4000 * 3600, "America/Goose_Bay", - Calendar.APRIL, 1, Calendar.SUNDAY, 60000, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 60000); - timezones.put("America/Goose_Bay", tz); - tz = new SimpleTimeZone - (-4000 * 3600, "America/Glace_Bay", - Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("America/Glace_Bay", tz); - timezones.put("America/Halifax", tz); - timezones.put("America/Thule", tz); - timezones.put("Atlantic/Bermuda", tz); - tz = new SimpleTimeZone - (-4000 * 3600, "America/Santiago", - Calendar.OCTOBER, 9, -Calendar.SUNDAY, 0 * 3600, - Calendar.MARCH, 9, -Calendar.SUNDAY, 0 * 3600); - timezones.put("America/Santiago", tz); - timezones.put("Antarctica/Palmer", tz); - tz = new SimpleTimeZone - (-4000 * 3600, "Atlantic/Stanley", - Calendar.SEPTEMBER, 2, Calendar.SUNDAY, 0 * 3600, - Calendar.APRIL, 16, -Calendar.SUNDAY, 0 * 3600); - timezones.put("Atlantic/Stanley", tz); - tz = new SimpleTimeZone - (-3500 * 3600, "CNT", - Calendar.APRIL, 1, Calendar.SUNDAY, 60000, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 60000); - timezones.put("CNT", tz); - timezones.put("America/St_Johns", tz); - tz = new SimpleTimeZone - (-3000 * 3600, "America/Araguaina", - Calendar.OCTOBER, 2, Calendar.SUNDAY, 0 * 3600, - Calendar.FEBRUARY, 3, Calendar.SUNDAY, 0 * 3600); - timezones.put("America/Araguaina", tz); - timezones.put("America/Sao_Paulo", tz); - tz = new SimpleTimeZone(-3000 * 3600, "AGT"); - timezones.put("AGT", tz); - timezones.put("America/Belem", tz); - timezones.put("America/Buenos_Aires", tz); - timezones.put("America/Catamarca", tz); - timezones.put("America/Cayenne", tz); - timezones.put("America/Cordoba", tz); - timezones.put("America/Fortaleza", tz); - timezones.put("America/Jujuy", tz); - timezones.put("America/Maceio", tz); - timezones.put("America/Mendoza", tz); - timezones.put("America/Montevideo", tz); - timezones.put("America/Paramaribo", tz); - timezones.put("America/Recife", tz); - timezones.put("America/Rosario", tz); - tz = new SimpleTimeZone - (-3000 * 3600, "America/Godthab", - Calendar.MARCH, 30, -Calendar.SATURDAY, 22000 * 3600, - Calendar.OCTOBER, 30, -Calendar.SATURDAY, 22000 * 3600); - timezones.put("America/Godthab", tz); - tz = new SimpleTimeZone - (-3000 * 3600, "America/Miquelon", - Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("America/Miquelon", tz); - tz = new SimpleTimeZone(-2000 * 3600, "America/Noronha"); - timezones.put("America/Noronha", tz); - timezones.put("Atlantic/South_Georgia", tz); - tz = new SimpleTimeZone - (-1000 * 3600, "America/Scoresbysund", - Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600); - timezones.put("America/Scoresbysund", tz); - timezones.put("Atlantic/Azores", tz); - tz = new SimpleTimeZone(-1000 * 3600, "Atlantic/Cape_Verde"); - timezones.put("Atlantic/Cape_Verde", tz); - timezones.put("Atlantic/Jan_Mayen", tz); - tz = new SimpleTimeZone(0 * 3600, "GMT"); - timezones.put("GMT", tz); - timezones.put("UTC", tz); - timezones.put("Africa/Abidjan", tz); - timezones.put("Africa/Accra", tz); - timezones.put("Africa/Bamako", tz); - timezones.put("Africa/Banjul", tz); - timezones.put("Africa/Bissau", tz); - timezones.put("Africa/Casablanca", tz); - timezones.put("Africa/Conakry", tz); - timezones.put("Africa/Dakar", tz); - timezones.put("Africa/El_Aaiun", tz); - timezones.put("Africa/Freetown", tz); - timezones.put("Africa/Lome", tz); - timezones.put("Africa/Monrovia", tz); - timezones.put("Africa/Nouakchott", tz); - timezones.put("Africa/Ouagadougou", tz); - timezones.put("Africa/Sao_Tome", tz); - timezones.put("Africa/Timbuktu", tz); - timezones.put("Atlantic/Reykjavik", tz); - timezones.put("Atlantic/St_Helena", tz); - timezones.put("Europe/Belfast", tz); - timezones.put("Europe/Dublin", tz); - timezones.put("Europe/London", tz); - tz = new SimpleTimeZone - (0 * 3600, "WET", - Calendar.MARCH, -1, Calendar.SUNDAY, 1000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1000 * 3600); - timezones.put("WET", tz); - timezones.put("Atlantic/Canary", tz); - timezones.put("Atlantic/Faeroe", tz); - timezones.put("Atlantic/Madeira", tz); - timezones.put("Europe/Lisbon", tz); - tz = new SimpleTimeZone(1000 * 3600, "Africa/Algiers"); - timezones.put("Africa/Algiers", tz); - timezones.put("Africa/Bangui", tz); - timezones.put("Africa/Brazzaville", tz); - timezones.put("Africa/Douala", tz); - timezones.put("Africa/Kinshasa", tz); - timezones.put("Africa/Lagos", tz); - timezones.put("Africa/Libreville", tz); - timezones.put("Africa/Luanda", tz); - timezones.put("Africa/Malabo", tz); - timezones.put("Africa/Ndjamena", tz); - timezones.put("Africa/Niamey", tz); - timezones.put("Africa/Porto-Novo", tz); - timezones.put("Africa/Tunis", tz); - tz = new SimpleTimeZone - (1000 * 3600, "Africa/Windhoek", - Calendar.SEPTEMBER, 1, Calendar.SUNDAY, 2000 * 3600, - Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Africa/Windhoek", tz); - tz = new SimpleTimeZone - (1000 * 3600, "CET", - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("CET", tz); - timezones.put("ECT", tz); - timezones.put("MET", tz); - timezones.put("Africa/Ceuta", tz); - timezones.put("Arctic/Longyearbyen", tz); - timezones.put("Europe/Amsterdam", tz); - timezones.put("Europe/Andorra", tz); - timezones.put("Europe/Belgrade", tz); - timezones.put("Europe/Berlin", tz); - timezones.put("Europe/Bratislava", tz); - timezones.put("Europe/Brussels", tz); - timezones.put("Europe/Budapest", tz); - timezones.put("Europe/Copenhagen", tz); - timezones.put("Europe/Gibraltar", tz); - timezones.put("Europe/Ljubljana", tz); - timezones.put("Europe/Luxembourg", tz); - timezones.put("Europe/Madrid", tz); - timezones.put("Europe/Malta", tz); - timezones.put("Europe/Monaco", tz); - timezones.put("Europe/Oslo", tz); - timezones.put("Europe/Paris", tz); - timezones.put("Europe/Prague", tz); - timezones.put("Europe/Rome", tz); - timezones.put("Europe/San_Marino", tz); - timezones.put("Europe/Sarajevo", tz); - timezones.put("Europe/Skopje", tz); - timezones.put("Europe/Stockholm", tz); - timezones.put("Europe/Tirane", tz); - timezones.put("Europe/Vaduz", tz); - timezones.put("Europe/Vatican", tz); - timezones.put("Europe/Vienna", tz); - timezones.put("Europe/Warsaw", tz); - timezones.put("Europe/Zagreb", tz); - timezones.put("Europe/Zurich", tz); - tz = new SimpleTimeZone - (2000 * 3600, "ART", - Calendar.APRIL, -1, Calendar.FRIDAY, 0 * 3600, - Calendar.SEPTEMBER, -1, Calendar.THURSDAY, 23000 * 3600); - timezones.put("ART", tz); - timezones.put("Africa/Cairo", tz); - tz = new SimpleTimeZone(2000 * 3600, "CAT"); - timezones.put("CAT", tz); - timezones.put("Africa/Blantyre", tz); - timezones.put("Africa/Bujumbura", tz); - timezones.put("Africa/Gaborone", tz); - timezones.put("Africa/Harare", tz); - timezones.put("Africa/Johannesburg", tz); - timezones.put("Africa/Kigali", tz); - timezones.put("Africa/Lubumbashi", tz); - timezones.put("Africa/Lusaka", tz); - timezones.put("Africa/Maputo", tz); - timezones.put("Africa/Maseru", tz); - timezones.put("Africa/Mbabane", tz); - timezones.put("Africa/Tripoli", tz); - timezones.put("Europe/Riga", tz); - timezones.put("Europe/Tallinn", tz); - timezones.put("Europe/Vilnius", tz); - tz = new SimpleTimeZone - (2000 * 3600, "Asia/Amman", - Calendar.MARCH, -1, Calendar.THURSDAY, 0 * 3600, - Calendar.SEPTEMBER, -1, Calendar.THURSDAY, 0 * 3600); - timezones.put("Asia/Amman", tz); - tz = new SimpleTimeZone - (2000 * 3600, "Asia/Beirut", - Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600); - timezones.put("Asia/Beirut", tz); - tz = new SimpleTimeZone - (2000 * 3600, "Asia/Damascus", - Calendar.APRIL, 1, 0, 0 * 3600, - Calendar.OCTOBER, 1, 0, 0 * 3600); - timezones.put("Asia/Damascus", tz); - tz = new SimpleTimeZone - (2000 * 3600, "Asia/Gaza", - Calendar.APRIL, 3, Calendar.FRIDAY, 0 * 3600, - Calendar.OCTOBER, 3, Calendar.FRIDAY, 0 * 3600); - timezones.put("Asia/Gaza", tz); - tz = new SimpleTimeZone - (2000 * 3600, "Asia/Jerusalem", - Calendar.APRIL, 1, 0, 1000 * 3600, - Calendar.OCTOBER, 1, 0, 1000 * 3600); - timezones.put("Asia/Jerusalem", tz); - tz = new SimpleTimeZone - (2000 * 3600, "EET", - Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600); - timezones.put("EET", tz); - timezones.put("Asia/Istanbul", tz); - timezones.put("Asia/Nicosia", tz); - timezones.put("Europe/Athens", tz); - timezones.put("Europe/Bucharest", tz); - timezones.put("Europe/Chisinau", tz); - timezones.put("Europe/Helsinki", tz); - timezones.put("Europe/Istanbul", tz); - timezones.put("Europe/Kiev", tz); - timezones.put("Europe/Nicosia", tz); - timezones.put("Europe/Simferopol", tz); - timezones.put("Europe/Sofia", tz); - timezones.put("Europe/Uzhgorod", tz); - timezones.put("Europe/Zaporozhye", tz); - tz = new SimpleTimeZone - (2000 * 3600, "Europe/Kaliningrad", - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Europe/Kaliningrad", tz); - timezones.put("Europe/Minsk", tz); - tz = new SimpleTimeZone - (3000 * 3600, "Asia/Baghdad", - Calendar.APRIL, 1, 0, 3000 * 3600, - Calendar.OCTOBER, 1, 0, 3000 * 3600); - timezones.put("Asia/Baghdad", tz); - tz = new SimpleTimeZone - (3000 * 3600, "Europe/Moscow", - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Europe/Moscow", tz); - timezones.put("Europe/Tiraspol", tz); - tz = new SimpleTimeZone(3000 * 3600, "EAT"); - timezones.put("EAT", tz); - timezones.put("Africa/Addis_Ababa", tz); - timezones.put("Africa/Asmera", tz); - timezones.put("Africa/Dar_es_Salaam", tz); - timezones.put("Africa/Djibouti", tz); - timezones.put("Africa/Kampala", tz); - timezones.put("Africa/Khartoum", tz); - timezones.put("Africa/Mogadishu", tz); - timezones.put("Africa/Nairobi", tz); - timezones.put("Antarctica/Syowa", tz); - timezones.put("Asia/Aden", tz); - timezones.put("Asia/Bahrain", tz); - timezones.put("Asia/Kuwait", tz); - timezones.put("Asia/Qatar", tz); - timezones.put("Asia/Riyadh", tz); - timezones.put("Indian/Antananarivo", tz); - timezones.put("Indian/Comoro", tz); - timezones.put("Indian/Mayotte", tz); - tz = new SimpleTimeZone(3500 * 3600, "Asia/Tehran"); - timezones.put("Asia/Tehran", tz); - tz = new SimpleTimeZone - (4000 * 3600, "Asia/Baku", - Calendar.MARCH, -1, Calendar.SUNDAY, 1000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 1000 * 3600); - timezones.put("Asia/Baku", tz); - tz = new SimpleTimeZone - (4000 * 3600, "Asia/Aqtau", - Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600); - timezones.put("Asia/Aqtau", tz); - timezones.put("Asia/Tbilisi", tz); - tz = new SimpleTimeZone - (4000 * 3600, "Asia/Yerevan", - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Asia/Yerevan", tz); - timezones.put("Europe/Samara", tz); - tz = new SimpleTimeZone(4000 * 3600, "NET"); - timezones.put("NET", tz); - timezones.put("Asia/Dubai", tz); - timezones.put("Asia/Muscat", tz); - timezones.put("Indian/Mahe", tz); - timezones.put("Indian/Mauritius", tz); - timezones.put("Indian/Reunion", tz); - tz = new SimpleTimeZone(4500 * 3600, "Asia/Kabul"); - timezones.put("Asia/Kabul", tz); - tz = new SimpleTimeZone - (5000 * 3600, "Asia/Aqtobe", - Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600); - timezones.put("Asia/Aqtobe", tz); - tz = new SimpleTimeZone - (5000 * 3600, "Asia/Bishkek", - Calendar.MARCH, -1, Calendar.SUNDAY, 2500 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2500 * 3600); - timezones.put("Asia/Bishkek", tz); - tz = new SimpleTimeZone - (5000 * 3600, "Asia/Yekaterinburg", - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Asia/Yekaterinburg", tz); - tz = new SimpleTimeZone(5000 * 3600, "PLT"); - timezones.put("PLT", tz); - timezones.put("Asia/Ashgabat", tz); - timezones.put("Asia/Dushanbe", tz); - timezones.put("Asia/Karachi", tz); - timezones.put("Asia/Samarkand", tz); - timezones.put("Asia/Tashkent", tz); - timezones.put("Indian/Chagos", tz); - timezones.put("Indian/Kerguelen", tz); - timezones.put("Indian/Maldives", tz); - tz = new SimpleTimeZone(5500 * 3600, "IST"); - timezones.put("IST", tz); - timezones.put("Asia/Calcutta", tz); - tz = new SimpleTimeZone(5750 * 3600, "Asia/Katmandu"); - timezones.put("Asia/Katmandu", tz); - tz = new SimpleTimeZone(6000 * 3600, "BST"); - timezones.put("BST", tz); - timezones.put("Antarctica/Mawson", tz); - timezones.put("Asia/Colombo", tz); - timezones.put("Asia/Dhaka", tz); - timezones.put("Asia/Thimphu", tz); - tz = new SimpleTimeZone - (6000 * 3600, "Asia/Almaty", - Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600); - timezones.put("Asia/Almaty", tz); - tz = new SimpleTimeZone - (6000 * 3600, "Asia/Novosibirsk", - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Asia/Novosibirsk", tz); - timezones.put("Asia/Omsk", tz); - tz = new SimpleTimeZone(6500 * 3600, "Asia/Rangoon"); - timezones.put("Asia/Rangoon", tz); - timezones.put("Indian/Cocos", tz); - tz = new SimpleTimeZone(7000 * 3600, "VST"); - timezones.put("VST", tz); - timezones.put("Antarctica/Davis", tz); - timezones.put("Asia/Bangkok", tz); - timezones.put("Asia/Hovd", tz); - timezones.put("Asia/Jakarta", tz); - timezones.put("Asia/Phnom_Penh", tz); - timezones.put("Asia/Saigon", tz); - timezones.put("Asia/Vientiane", tz); - timezones.put("Indian/Christmas", tz); - tz = new SimpleTimeZone - (7000 * 3600, "Asia/Krasnoyarsk", - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Asia/Krasnoyarsk", tz); - tz = new SimpleTimeZone(8000 * 3600, "CTT"); - timezones.put("CTT", tz); - timezones.put("Antarctica/Casey", tz); - timezones.put("Asia/Brunei", tz); - timezones.put("Asia/Chungking", tz); - timezones.put("Asia/Harbin", tz); - timezones.put("Asia/Hong_Kong", tz); - timezones.put("Asia/Kashgar", tz); - timezones.put("Asia/Kuala_Lumpur", tz); - timezones.put("Asia/Kuching", tz); - timezones.put("Asia/Macao", tz); - timezones.put("Asia/Manila", tz); - timezones.put("Asia/Shanghai", tz); - timezones.put("Asia/Singapore", tz); - timezones.put("Asia/Taipei", tz); - timezones.put("Asia/Ujung_Pandang", tz); - timezones.put("Asia/Ulaanbaatar", tz); - timezones.put("Asia/Urumqi", tz); - timezones.put("Australia/Perth", tz); - tz = new SimpleTimeZone - (8000 * 3600, "Asia/Irkutsk", - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Asia/Irkutsk", tz); - tz = new SimpleTimeZone(9000 * 3600, "JST"); - timezones.put("JST", tz); - timezones.put("Asia/Dili", tz); - timezones.put("Asia/Jayapura", tz); - timezones.put("Asia/Pyongyang", tz); - timezones.put("Asia/Seoul", tz); - timezones.put("Asia/Tokyo", tz); - timezones.put("Pacific/Palau", tz); - tz = new SimpleTimeZone - (9000 * 3600, "Asia/Yakutsk", - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Asia/Yakutsk", tz); - tz = new SimpleTimeZone - (9500 * 3600, "Australia/Adelaide", - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Australia/Adelaide", tz); - timezones.put("Australia/Broken_Hill", tz); - tz = new SimpleTimeZone(9500 * 3600, "ACT"); - timezones.put("ACT", tz); - timezones.put("Australia/Darwin", tz); - tz = new SimpleTimeZone(10000 * 3600, "Antarctica/DumontDUrville"); - timezones.put("Antarctica/DumontDUrville", tz); - timezones.put("Australia/Brisbane", tz); - timezones.put("Australia/Lindeman", tz); - timezones.put("Pacific/Guam", tz); - timezones.put("Pacific/Port_Moresby", tz); - timezones.put("Pacific/Saipan", tz); - timezones.put("Pacific/Truk", tz); - timezones.put("Pacific/Yap", tz); - tz = new SimpleTimeZone - (10000 * 3600, "Asia/Vladivostok", - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Asia/Vladivostok", tz); - tz = new SimpleTimeZone - (10000 * 3600, "Australia/Hobart", - Calendar.OCTOBER, 1, Calendar.SUNDAY, 2000 * 3600, - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Australia/Hobart", tz); - tz = new SimpleTimeZone - (10000 * 3600, "AET", - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("AET", tz); - timezones.put("Australia/Melbourne", tz); - timezones.put("Australia/Sydney", tz); - tz = new SimpleTimeZone - (10500 * 3600, "Australia/Lord_Howe", - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, 500 * 3600); - timezones.put("Australia/Lord_Howe", tz); - tz = new SimpleTimeZone - (11000 * 3600, "Asia/Magadan", - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Asia/Magadan", tz); - tz = new SimpleTimeZone(11000 * 3600, "SST"); - timezones.put("SST", tz); - timezones.put("Pacific/Efate", tz); - timezones.put("Pacific/Guadalcanal", tz); - timezones.put("Pacific/Kosrae", tz); - timezones.put("Pacific/Noumea", tz); - timezones.put("Pacific/Ponape", tz); - tz = new SimpleTimeZone(11500 * 3600, "Pacific/Norfolk"); - timezones.put("Pacific/Norfolk", tz); - tz = new SimpleTimeZone - (12000 * 3600, "NST", - Calendar.OCTOBER, 1, Calendar.SUNDAY, 2000 * 3600, - Calendar.MARCH, 3, Calendar.SUNDAY, 2000 * 3600); - timezones.put("NST", tz); - timezones.put("Antarctica/McMurdo", tz); - timezones.put("Antarctica/South_Pole", tz); - timezones.put("Pacific/Auckland", tz); - tz = new SimpleTimeZone - (12000 * 3600, "Asia/Anadyr", - Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, - Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); - timezones.put("Asia/Anadyr", tz); - timezones.put("Asia/Kamchatka", tz); - tz = new SimpleTimeZone(12000 * 3600, "Pacific/Fiji"); - timezones.put("Pacific/Fiji", tz); - timezones.put("Pacific/Funafuti", tz); - timezones.put("Pacific/Kwajalein", tz); - timezones.put("Pacific/Majuro", tz); - timezones.put("Pacific/Nauru", tz); - timezones.put("Pacific/Tarawa", tz); - timezones.put("Pacific/Wake", tz); - timezones.put("Pacific/Wallis", tz); - tz = new SimpleTimeZone - (12750 * 3600, "Pacific/Chatham", - Calendar.OCTOBER, 1, Calendar.SUNDAY, 2750 * 3600, - Calendar.MARCH, 3, Calendar.SUNDAY, 2750 * 3600); - timezones.put("Pacific/Chatham", tz); - tz = new SimpleTimeZone(13000 * 3600, "Pacific/Enderbury"); - timezones.put("Pacific/Enderbury", tz); - timezones.put("Pacific/Tongatapu", tz); - tz = new SimpleTimeZone(14000 * 3600, "Pacific/Kiritimati"); - timezones.put("Pacific/Kiritimati", tz); - } - - - /* Look up default timezone */ - static - { - if (Configuration.INIT_LOAD_LIBRARY) + private static Hashtable timezones0; + /* initialize this static field lazily to overhead if + * it is not needed: + */ + private static synchronized Hashtable timezones() { + if (timezones0==null) { - System.loadLibrary("javautil"); + Hashtable timezones = new Hashtable(); + timezones0 = timezones; + + TimeZone tz; + // Automatically generated by scripts/timezones.pl + // XXX - Should we read this data from a file? + tz = new SimpleTimeZone(-11000 * 3600, "MIT"); + timezones0.put("MIT", tz); + timezones0.put("Pacific/Apia", tz); + timezones0.put("Pacific/Midway", tz); + timezones0.put("Pacific/Niue", tz); + timezones0.put("Pacific/Pago_Pago", tz); + tz = new SimpleTimeZone + (-10000 * 3600, "America/Adak", + Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("America/Adak", tz); + tz = new SimpleTimeZone(-10000 * 3600, "HST"); + timezones0.put("HST", tz); + timezones0.put("Pacific/Fakaofo", tz); + timezones0.put("Pacific/Honolulu", tz); + timezones0.put("Pacific/Johnston", tz); + timezones0.put("Pacific/Rarotonga", tz); + timezones0.put("Pacific/Tahiti", tz); + tz = new SimpleTimeZone(-9500 * 3600, "Pacific/Marquesas"); + timezones0.put("Pacific/Marquesas", tz); + tz = new SimpleTimeZone + (-9000 * 3600, "AST", + Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("AST", tz); + timezones0.put("America/Anchorage", tz); + timezones0.put("America/Juneau", tz); + timezones0.put("America/Nome", tz); + timezones0.put("America/Yakutat", tz); + tz = new SimpleTimeZone(-9000 * 3600, "Pacific/Gambier"); + timezones0.put("Pacific/Gambier", tz); + tz = new SimpleTimeZone + (-8000 * 3600, "PST", + Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("PST", tz); + timezones0.put("PST8PDT", tz); + timezones0.put("America/Dawson", tz); + timezones0.put("America/Los_Angeles", tz); + timezones0.put("America/Tijuana", tz); + timezones0.put("America/Vancouver", tz); + timezones0.put("America/Whitehorse", tz); + timezones0.put("US/Pacific-New", tz); + tz = new SimpleTimeZone(-8000 * 3600, "Pacific/Pitcairn"); + timezones0.put("Pacific/Pitcairn", tz); + tz = new SimpleTimeZone + (-7000 * 3600, "MST", + Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("MST", tz); + timezones0.put("MST7MDT", tz); + timezones0.put("America/Boise", tz); + timezones0.put("America/Chihuahua", tz); + timezones0.put("America/Denver", tz); + timezones0.put("America/Edmonton", tz); + timezones0.put("America/Inuvik", tz); + timezones0.put("America/Mazatlan", tz); + timezones0.put("America/Shiprock", tz); + timezones0.put("America/Yellowknife", tz); + tz = new SimpleTimeZone(-7000 * 3600, "MST7"); + timezones0.put("MST7", tz); + timezones0.put("PNT", tz); + timezones0.put("America/Dawson_Creek", tz); + timezones0.put("America/Hermosillo", tz); + timezones0.put("America/Phoenix", tz); + tz = new SimpleTimeZone + (-6000 * 3600, "CST", + Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("CST", tz); + timezones0.put("CST6CDT", tz); + timezones0.put("America/Cambridge_Bay", tz); + timezones0.put("America/Cancun", tz); + timezones0.put("America/Chicago", tz); + timezones0.put("America/Menominee", tz); + timezones0.put("America/Merida", tz); + timezones0.put("America/Mexico_City", tz); + timezones0.put("America/Monterrey", tz); + timezones0.put("America/Rainy_River", tz); + timezones0.put("America/Winnipeg", tz); + tz = new SimpleTimeZone(-6000 * 3600, "America/Belize"); + timezones0.put("America/Belize", tz); + timezones0.put("America/Costa_Rica", tz); + timezones0.put("America/El_Salvador", tz); + timezones0.put("America/Guatemala", tz); + timezones0.put("America/Managua", tz); + timezones0.put("America/Regina", tz); + timezones0.put("America/Swift_Current", tz); + timezones0.put("America/Tegucigalpa", tz); + timezones0.put("Pacific/Galapagos", tz); + tz = new SimpleTimeZone + (-6000 * 3600, "Pacific/Easter", + Calendar.OCTOBER, 9, -Calendar.SUNDAY, 0 * 3600, + Calendar.MARCH, 9, -Calendar.SUNDAY, 0 * 3600); + timezones0.put("Pacific/Easter", tz); + tz = new SimpleTimeZone + (-5000 * 3600, "America/Grand_Turk", + Calendar.APRIL, 1, Calendar.SUNDAY, 0 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600); + timezones0.put("America/Grand_Turk", tz); + timezones0.put("America/Havana", tz); + tz = new SimpleTimeZone(-5000 * 3600, "EST5"); + timezones0.put("EST5", tz); + timezones0.put("IET", tz); + timezones0.put("America/Bogota", tz); + timezones0.put("America/Cayman", tz); + timezones0.put("America/Eirunepe", tz); + timezones0.put("America/Guayaquil", tz); + timezones0.put("America/Indiana/Indianapolis", tz); + timezones0.put("America/Indiana/Knox", tz); + timezones0.put("America/Indiana/Marengo", tz); + timezones0.put("America/Indiana/Vevay", tz); + timezones0.put("America/Indianapolis", tz); + timezones0.put("America/Iqaluit", tz); + timezones0.put("America/Jamaica", tz); + timezones0.put("America/Lima", tz); + timezones0.put("America/Panama", tz); + timezones0.put("America/Pangnirtung", tz); + timezones0.put("America/Port-au-Prince", tz); + timezones0.put("America/Porto_Acre", tz); + timezones0.put("America/Rankin_Inlet", tz); + tz = new SimpleTimeZone + (-5000 * 3600, "EST", + Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("EST", tz); + timezones0.put("EST5EDT", tz); + timezones0.put("America/Detroit", tz); + timezones0.put("America/Kentucky/Louisville", tz); + timezones0.put("America/Kentucky/Monticello", tz); + timezones0.put("America/Louisville", tz); + timezones0.put("America/Montreal", tz); + timezones0.put("America/Nassau", tz); + timezones0.put("America/New_York", tz); + timezones0.put("America/Nipigon", tz); + timezones0.put("America/Thunder_Bay", tz); + tz = new SimpleTimeZone(-4000 * 3600, "PRT"); + timezones0.put("PRT", tz); + timezones0.put("America/Anguilla", tz); + timezones0.put("America/Antigua", tz); + timezones0.put("America/Aruba", tz); + timezones0.put("America/Barbados", tz); + timezones0.put("America/Boa_Vista", tz); + timezones0.put("America/Caracas", tz); + timezones0.put("America/Curacao", tz); + timezones0.put("America/Dominica", tz); + timezones0.put("America/Grenada", tz); + timezones0.put("America/Guadeloupe", tz); + timezones0.put("America/Guyana", tz); + timezones0.put("America/La_Paz", tz); + timezones0.put("America/Manaus", tz); + timezones0.put("America/Martinique", tz); + timezones0.put("America/Montserrat", tz); + timezones0.put("America/Port_of_Spain", tz); + timezones0.put("America/Porto_Velho", tz); + timezones0.put("America/Puerto_Rico", tz); + timezones0.put("America/Santo_Domingo", tz); + timezones0.put("America/St_Kitts", tz); + timezones0.put("America/St_Lucia", tz); + timezones0.put("America/St_Thomas", tz); + timezones0.put("America/St_Vincent", tz); + timezones0.put("America/Tortola", tz); + tz = new SimpleTimeZone + (-4000 * 3600, "America/Asuncion", + Calendar.OCTOBER, 1, Calendar.SUNDAY, 0 * 3600, + Calendar.FEBRUARY, -1, Calendar.SUNDAY, 0 * 3600); + timezones0.put("America/Asuncion", tz); + tz = new SimpleTimeZone + (-4000 * 3600, "America/Cuiaba", + Calendar.OCTOBER, 2, Calendar.SUNDAY, 0 * 3600, + Calendar.FEBRUARY, 3, Calendar.SUNDAY, 0 * 3600); + timezones0.put("America/Cuiaba", tz); + tz = new SimpleTimeZone + (-4000 * 3600, "America/Goose_Bay", + Calendar.APRIL, 1, Calendar.SUNDAY, 60000, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 60000); + timezones0.put("America/Goose_Bay", tz); + tz = new SimpleTimeZone + (-4000 * 3600, "America/Glace_Bay", + Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("America/Glace_Bay", tz); + timezones0.put("America/Halifax", tz); + timezones0.put("America/Thule", tz); + timezones0.put("Atlantic/Bermuda", tz); + tz = new SimpleTimeZone + (-4000 * 3600, "America/Santiago", + Calendar.OCTOBER, 9, -Calendar.SUNDAY, 0 * 3600, + Calendar.MARCH, 9, -Calendar.SUNDAY, 0 * 3600); + timezones0.put("America/Santiago", tz); + timezones0.put("Antarctica/Palmer", tz); + tz = new SimpleTimeZone + (-4000 * 3600, "Atlantic/Stanley", + Calendar.SEPTEMBER, 2, Calendar.SUNDAY, 0 * 3600, + Calendar.APRIL, 16, -Calendar.SUNDAY, 0 * 3600); + timezones0.put("Atlantic/Stanley", tz); + tz = new SimpleTimeZone + (-3500 * 3600, "CNT", + Calendar.APRIL, 1, Calendar.SUNDAY, 60000, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 60000); + timezones0.put("CNT", tz); + timezones0.put("America/St_Johns", tz); + tz = new SimpleTimeZone + (-3000 * 3600, "America/Araguaina", + Calendar.OCTOBER, 2, Calendar.SUNDAY, 0 * 3600, + Calendar.FEBRUARY, 3, Calendar.SUNDAY, 0 * 3600); + timezones0.put("America/Araguaina", tz); + timezones0.put("America/Sao_Paulo", tz); + tz = new SimpleTimeZone(-3000 * 3600, "AGT"); + timezones0.put("AGT", tz); + timezones0.put("America/Belem", tz); + timezones0.put("America/Buenos_Aires", tz); + timezones0.put("America/Catamarca", tz); + timezones0.put("America/Cayenne", tz); + timezones0.put("America/Cordoba", tz); + timezones0.put("America/Fortaleza", tz); + timezones0.put("America/Jujuy", tz); + timezones0.put("America/Maceio", tz); + timezones0.put("America/Mendoza", tz); + timezones0.put("America/Montevideo", tz); + timezones0.put("America/Paramaribo", tz); + timezones0.put("America/Recife", tz); + timezones0.put("America/Rosario", tz); + tz = new SimpleTimeZone + (-3000 * 3600, "America/Godthab", + Calendar.MARCH, 30, -Calendar.SATURDAY, 22000 * 3600, + Calendar.OCTOBER, 30, -Calendar.SATURDAY, 22000 * 3600); + timezones0.put("America/Godthab", tz); + tz = new SimpleTimeZone + (-3000 * 3600, "America/Miquelon", + Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("America/Miquelon", tz); + tz = new SimpleTimeZone(-2000 * 3600, "America/Noronha"); + timezones0.put("America/Noronha", tz); + timezones0.put("Atlantic/South_Georgia", tz); + tz = new SimpleTimeZone + (-1000 * 3600, "America/Scoresbysund", + Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600); + timezones0.put("America/Scoresbysund", tz); + timezones0.put("Atlantic/Azores", tz); + tz = new SimpleTimeZone(-1000 * 3600, "Atlantic/Cape_Verde"); + timezones0.put("Atlantic/Cape_Verde", tz); + timezones0.put("Atlantic/Jan_Mayen", tz); + tz = new SimpleTimeZone(0 * 3600, "GMT"); + timezones0.put("GMT", tz); + timezones0.put("UTC", tz); + timezones0.put("Africa/Abidjan", tz); + timezones0.put("Africa/Accra", tz); + timezones0.put("Africa/Bamako", tz); + timezones0.put("Africa/Banjul", tz); + timezones0.put("Africa/Bissau", tz); + timezones0.put("Africa/Casablanca", tz); + timezones0.put("Africa/Conakry", tz); + timezones0.put("Africa/Dakar", tz); + timezones0.put("Africa/El_Aaiun", tz); + timezones0.put("Africa/Freetown", tz); + timezones0.put("Africa/Lome", tz); + timezones0.put("Africa/Monrovia", tz); + timezones0.put("Africa/Nouakchott", tz); + timezones0.put("Africa/Ouagadougou", tz); + timezones0.put("Africa/Sao_Tome", tz); + timezones0.put("Africa/Timbuktu", tz); + timezones0.put("Atlantic/Reykjavik", tz); + timezones0.put("Atlantic/St_Helena", tz); + timezones0.put("Europe/Belfast", tz); + timezones0.put("Europe/Dublin", tz); + timezones0.put("Europe/London", tz); + tz = new SimpleTimeZone + (0 * 3600, "WET", + Calendar.MARCH, -1, Calendar.SUNDAY, 1000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 1000 * 3600); + timezones0.put("WET", tz); + timezones0.put("Atlantic/Canary", tz); + timezones0.put("Atlantic/Faeroe", tz); + timezones0.put("Atlantic/Madeira", tz); + timezones0.put("Europe/Lisbon", tz); + tz = new SimpleTimeZone(1000 * 3600, "Africa/Algiers"); + timezones0.put("Africa/Algiers", tz); + timezones0.put("Africa/Bangui", tz); + timezones0.put("Africa/Brazzaville", tz); + timezones0.put("Africa/Douala", tz); + timezones0.put("Africa/Kinshasa", tz); + timezones0.put("Africa/Lagos", tz); + timezones0.put("Africa/Libreville", tz); + timezones0.put("Africa/Luanda", tz); + timezones0.put("Africa/Malabo", tz); + timezones0.put("Africa/Ndjamena", tz); + timezones0.put("Africa/Niamey", tz); + timezones0.put("Africa/Porto-Novo", tz); + timezones0.put("Africa/Tunis", tz); + tz = new SimpleTimeZone + (1000 * 3600, "Africa/Windhoek", + Calendar.SEPTEMBER, 1, Calendar.SUNDAY, 2000 * 3600, + Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Africa/Windhoek", tz); + tz = new SimpleTimeZone + (1000 * 3600, "CET", + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("CET", tz); + timezones0.put("ECT", tz); + timezones0.put("MET", tz); + timezones0.put("Africa/Ceuta", tz); + timezones0.put("Arctic/Longyearbyen", tz); + timezones0.put("Europe/Amsterdam", tz); + timezones0.put("Europe/Andorra", tz); + timezones0.put("Europe/Belgrade", tz); + timezones0.put("Europe/Berlin", tz); + timezones0.put("Europe/Bratislava", tz); + timezones0.put("Europe/Brussels", tz); + timezones0.put("Europe/Budapest", tz); + timezones0.put("Europe/Copenhagen", tz); + timezones0.put("Europe/Gibraltar", tz); + timezones0.put("Europe/Ljubljana", tz); + timezones0.put("Europe/Luxembourg", tz); + timezones0.put("Europe/Madrid", tz); + timezones0.put("Europe/Malta", tz); + timezones0.put("Europe/Monaco", tz); + timezones0.put("Europe/Oslo", tz); + timezones0.put("Europe/Paris", tz); + timezones0.put("Europe/Prague", tz); + timezones0.put("Europe/Rome", tz); + timezones0.put("Europe/San_Marino", tz); + timezones0.put("Europe/Sarajevo", tz); + timezones0.put("Europe/Skopje", tz); + timezones0.put("Europe/Stockholm", tz); + timezones0.put("Europe/Tirane", tz); + timezones0.put("Europe/Vaduz", tz); + timezones0.put("Europe/Vatican", tz); + timezones0.put("Europe/Vienna", tz); + timezones0.put("Europe/Warsaw", tz); + timezones0.put("Europe/Zagreb", tz); + timezones0.put("Europe/Zurich", tz); + tz = new SimpleTimeZone + (2000 * 3600, "ART", + Calendar.APRIL, -1, Calendar.FRIDAY, 0 * 3600, + Calendar.SEPTEMBER, -1, Calendar.THURSDAY, 23000 * 3600); + timezones0.put("ART", tz); + timezones0.put("Africa/Cairo", tz); + tz = new SimpleTimeZone(2000 * 3600, "CAT"); + timezones0.put("CAT", tz); + timezones0.put("Africa/Blantyre", tz); + timezones0.put("Africa/Bujumbura", tz); + timezones0.put("Africa/Gaborone", tz); + timezones0.put("Africa/Harare", tz); + timezones0.put("Africa/Johannesburg", tz); + timezones0.put("Africa/Kigali", tz); + timezones0.put("Africa/Lubumbashi", tz); + timezones0.put("Africa/Lusaka", tz); + timezones0.put("Africa/Maputo", tz); + timezones0.put("Africa/Maseru", tz); + timezones0.put("Africa/Mbabane", tz); + timezones0.put("Africa/Tripoli", tz); + timezones0.put("Europe/Riga", tz); + timezones0.put("Europe/Tallinn", tz); + timezones0.put("Europe/Vilnius", tz); + tz = new SimpleTimeZone + (2000 * 3600, "Asia/Amman", + Calendar.MARCH, -1, Calendar.THURSDAY, 0 * 3600, + Calendar.SEPTEMBER, -1, Calendar.THURSDAY, 0 * 3600); + timezones0.put("Asia/Amman", tz); + tz = new SimpleTimeZone + (2000 * 3600, "Asia/Beirut", + Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600); + timezones0.put("Asia/Beirut", tz); + tz = new SimpleTimeZone + (2000 * 3600, "Asia/Damascus", + Calendar.APRIL, 1, 0, 0 * 3600, + Calendar.OCTOBER, 1, 0, 0 * 3600); + timezones0.put("Asia/Damascus", tz); + tz = new SimpleTimeZone + (2000 * 3600, "Asia/Gaza", + Calendar.APRIL, 3, Calendar.FRIDAY, 0 * 3600, + Calendar.OCTOBER, 3, Calendar.FRIDAY, 0 * 3600); + timezones0.put("Asia/Gaza", tz); + tz = new SimpleTimeZone + (2000 * 3600, "Asia/Jerusalem", + Calendar.APRIL, 1, 0, 1000 * 3600, + Calendar.OCTOBER, 1, 0, 1000 * 3600); + timezones0.put("Asia/Jerusalem", tz); + tz = new SimpleTimeZone + (2000 * 3600, "EET", + Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600); + timezones0.put("EET", tz); + timezones0.put("Asia/Istanbul", tz); + timezones0.put("Asia/Nicosia", tz); + timezones0.put("Europe/Athens", tz); + timezones0.put("Europe/Bucharest", tz); + timezones0.put("Europe/Chisinau", tz); + timezones0.put("Europe/Helsinki", tz); + timezones0.put("Europe/Istanbul", tz); + timezones0.put("Europe/Kiev", tz); + timezones0.put("Europe/Nicosia", tz); + timezones0.put("Europe/Simferopol", tz); + timezones0.put("Europe/Sofia", tz); + timezones0.put("Europe/Uzhgorod", tz); + timezones0.put("Europe/Zaporozhye", tz); + tz = new SimpleTimeZone + (2000 * 3600, "Europe/Kaliningrad", + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Europe/Kaliningrad", tz); + timezones0.put("Europe/Minsk", tz); + tz = new SimpleTimeZone + (3000 * 3600, "Asia/Baghdad", + Calendar.APRIL, 1, 0, 3000 * 3600, + Calendar.OCTOBER, 1, 0, 3000 * 3600); + timezones0.put("Asia/Baghdad", tz); + tz = new SimpleTimeZone + (3000 * 3600, "Europe/Moscow", + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Europe/Moscow", tz); + timezones0.put("Europe/Tiraspol", tz); + tz = new SimpleTimeZone(3000 * 3600, "EAT"); + timezones0.put("EAT", tz); + timezones0.put("Africa/Addis_Ababa", tz); + timezones0.put("Africa/Asmera", tz); + timezones0.put("Africa/Dar_es_Salaam", tz); + timezones0.put("Africa/Djibouti", tz); + timezones0.put("Africa/Kampala", tz); + timezones0.put("Africa/Khartoum", tz); + timezones0.put("Africa/Mogadishu", tz); + timezones0.put("Africa/Nairobi", tz); + timezones0.put("Antarctica/Syowa", tz); + timezones0.put("Asia/Aden", tz); + timezones0.put("Asia/Bahrain", tz); + timezones0.put("Asia/Kuwait", tz); + timezones0.put("Asia/Qatar", tz); + timezones0.put("Asia/Riyadh", tz); + timezones0.put("Indian/Antananarivo", tz); + timezones0.put("Indian/Comoro", tz); + timezones0.put("Indian/Mayotte", tz); + tz = new SimpleTimeZone(3500 * 3600, "Asia/Tehran"); + timezones0.put("Asia/Tehran", tz); + tz = new SimpleTimeZone + (4000 * 3600, "Asia/Baku", + Calendar.MARCH, -1, Calendar.SUNDAY, 1000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 1000 * 3600); + timezones0.put("Asia/Baku", tz); + tz = new SimpleTimeZone + (4000 * 3600, "Asia/Aqtau", + Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600); + timezones0.put("Asia/Aqtau", tz); + timezones0.put("Asia/Tbilisi", tz); + tz = new SimpleTimeZone + (4000 * 3600, "Asia/Yerevan", + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Asia/Yerevan", tz); + timezones0.put("Europe/Samara", tz); + tz = new SimpleTimeZone(4000 * 3600, "NET"); + timezones0.put("NET", tz); + timezones0.put("Asia/Dubai", tz); + timezones0.put("Asia/Muscat", tz); + timezones0.put("Indian/Mahe", tz); + timezones0.put("Indian/Mauritius", tz); + timezones0.put("Indian/Reunion", tz); + tz = new SimpleTimeZone(4500 * 3600, "Asia/Kabul"); + timezones0.put("Asia/Kabul", tz); + tz = new SimpleTimeZone + (5000 * 3600, "Asia/Aqtobe", + Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600); + timezones0.put("Asia/Aqtobe", tz); + tz = new SimpleTimeZone + (5000 * 3600, "Asia/Bishkek", + Calendar.MARCH, -1, Calendar.SUNDAY, 2500 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2500 * 3600); + timezones0.put("Asia/Bishkek", tz); + tz = new SimpleTimeZone + (5000 * 3600, "Asia/Yekaterinburg", + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Asia/Yekaterinburg", tz); + tz = new SimpleTimeZone(5000 * 3600, "PLT"); + timezones0.put("PLT", tz); + timezones0.put("Asia/Ashgabat", tz); + timezones0.put("Asia/Dushanbe", tz); + timezones0.put("Asia/Karachi", tz); + timezones0.put("Asia/Samarkand", tz); + timezones0.put("Asia/Tashkent", tz); + timezones0.put("Indian/Chagos", tz); + timezones0.put("Indian/Kerguelen", tz); + timezones0.put("Indian/Maldives", tz); + tz = new SimpleTimeZone(5500 * 3600, "IST"); + timezones0.put("IST", tz); + timezones0.put("Asia/Calcutta", tz); + tz = new SimpleTimeZone(5750 * 3600, "Asia/Katmandu"); + timezones0.put("Asia/Katmandu", tz); + tz = new SimpleTimeZone(6000 * 3600, "BST"); + timezones0.put("BST", tz); + timezones0.put("Antarctica/Mawson", tz); + timezones0.put("Asia/Colombo", tz); + timezones0.put("Asia/Dhaka", tz); + timezones0.put("Asia/Thimphu", tz); + tz = new SimpleTimeZone + (6000 * 3600, "Asia/Almaty", + Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600); + timezones0.put("Asia/Almaty", tz); + tz = new SimpleTimeZone + (6000 * 3600, "Asia/Novosibirsk", + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Asia/Novosibirsk", tz); + timezones0.put("Asia/Omsk", tz); + tz = new SimpleTimeZone(6500 * 3600, "Asia/Rangoon"); + timezones0.put("Asia/Rangoon", tz); + timezones0.put("Indian/Cocos", tz); + tz = new SimpleTimeZone(7000 * 3600, "VST"); + timezones0.put("VST", tz); + timezones0.put("Antarctica/Davis", tz); + timezones0.put("Asia/Bangkok", tz); + timezones0.put("Asia/Hovd", tz); + timezones0.put("Asia/Jakarta", tz); + timezones0.put("Asia/Phnom_Penh", tz); + timezones0.put("Asia/Saigon", tz); + timezones0.put("Asia/Vientiane", tz); + timezones0.put("Indian/Christmas", tz); + tz = new SimpleTimeZone + (7000 * 3600, "Asia/Krasnoyarsk", + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Asia/Krasnoyarsk", tz); + tz = new SimpleTimeZone(8000 * 3600, "CTT"); + timezones0.put("CTT", tz); + timezones0.put("Antarctica/Casey", tz); + timezones0.put("Asia/Brunei", tz); + timezones0.put("Asia/Chungking", tz); + timezones0.put("Asia/Harbin", tz); + timezones0.put("Asia/Hong_Kong", tz); + timezones0.put("Asia/Kashgar", tz); + timezones0.put("Asia/Kuala_Lumpur", tz); + timezones0.put("Asia/Kuching", tz); + timezones0.put("Asia/Macao", tz); + timezones0.put("Asia/Manila", tz); + timezones0.put("Asia/Shanghai", tz); + timezones0.put("Asia/Singapore", tz); + timezones0.put("Asia/Taipei", tz); + timezones0.put("Asia/Ujung_Pandang", tz); + timezones0.put("Asia/Ulaanbaatar", tz); + timezones0.put("Asia/Urumqi", tz); + timezones0.put("Australia/Perth", tz); + tz = new SimpleTimeZone + (8000 * 3600, "Asia/Irkutsk", + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Asia/Irkutsk", tz); + tz = new SimpleTimeZone(9000 * 3600, "JST"); + timezones0.put("JST", tz); + timezones0.put("Asia/Dili", tz); + timezones0.put("Asia/Jayapura", tz); + timezones0.put("Asia/Pyongyang", tz); + timezones0.put("Asia/Seoul", tz); + timezones0.put("Asia/Tokyo", tz); + timezones0.put("Pacific/Palau", tz); + tz = new SimpleTimeZone + (9000 * 3600, "Asia/Yakutsk", + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Asia/Yakutsk", tz); + tz = new SimpleTimeZone + (9500 * 3600, "Australia/Adelaide", + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Australia/Adelaide", tz); + timezones0.put("Australia/Broken_Hill", tz); + tz = new SimpleTimeZone(9500 * 3600, "ACT"); + timezones0.put("ACT", tz); + timezones0.put("Australia/Darwin", tz); + tz = new SimpleTimeZone(10000 * 3600, "Antarctica/DumontDUrville"); + timezones0.put("Antarctica/DumontDUrville", tz); + timezones0.put("Australia/Brisbane", tz); + timezones0.put("Australia/Lindeman", tz); + timezones0.put("Pacific/Guam", tz); + timezones0.put("Pacific/Port_Moresby", tz); + timezones0.put("Pacific/Saipan", tz); + timezones0.put("Pacific/Truk", tz); + timezones0.put("Pacific/Yap", tz); + tz = new SimpleTimeZone + (10000 * 3600, "Asia/Vladivostok", + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Asia/Vladivostok", tz); + tz = new SimpleTimeZone + (10000 * 3600, "Australia/Hobart", + Calendar.OCTOBER, 1, Calendar.SUNDAY, 2000 * 3600, + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Australia/Hobart", tz); + tz = new SimpleTimeZone + (10000 * 3600, "AET", + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("AET", tz); + timezones0.put("Australia/Melbourne", tz); + timezones0.put("Australia/Sydney", tz); + tz = new SimpleTimeZone + (10500 * 3600, "Australia/Lord_Howe", + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, 500 * 3600); + timezones0.put("Australia/Lord_Howe", tz); + tz = new SimpleTimeZone + (11000 * 3600, "Asia/Magadan", + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Asia/Magadan", tz); + tz = new SimpleTimeZone(11000 * 3600, "SST"); + timezones0.put("SST", tz); + timezones0.put("Pacific/Efate", tz); + timezones0.put("Pacific/Guadalcanal", tz); + timezones0.put("Pacific/Kosrae", tz); + timezones0.put("Pacific/Noumea", tz); + timezones0.put("Pacific/Ponape", tz); + tz = new SimpleTimeZone(11500 * 3600, "Pacific/Norfolk"); + timezones0.put("Pacific/Norfolk", tz); + tz = new SimpleTimeZone + (12000 * 3600, "NST", + Calendar.OCTOBER, 1, Calendar.SUNDAY, 2000 * 3600, + Calendar.MARCH, 3, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("NST", tz); + timezones0.put("Antarctica/McMurdo", tz); + timezones0.put("Antarctica/South_Pole", tz); + timezones0.put("Pacific/Auckland", tz); + tz = new SimpleTimeZone + (12000 * 3600, "Asia/Anadyr", + Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, + Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600); + timezones0.put("Asia/Anadyr", tz); + timezones0.put("Asia/Kamchatka", tz); + tz = new SimpleTimeZone(12000 * 3600, "Pacific/Fiji"); + timezones0.put("Pacific/Fiji", tz); + timezones0.put("Pacific/Funafuti", tz); + timezones0.put("Pacific/Kwajalein", tz); + timezones0.put("Pacific/Majuro", tz); + timezones0.put("Pacific/Nauru", tz); + timezones0.put("Pacific/Tarawa", tz); + timezones0.put("Pacific/Wake", tz); + timezones0.put("Pacific/Wallis", tz); + tz = new SimpleTimeZone + (12750 * 3600, "Pacific/Chatham", + Calendar.OCTOBER, 1, Calendar.SUNDAY, 2750 * 3600, + Calendar.MARCH, 3, Calendar.SUNDAY, 2750 * 3600); + timezones0.put("Pacific/Chatham", tz); + tz = new SimpleTimeZone(13000 * 3600, "Pacific/Enderbury"); + timezones0.put("Pacific/Enderbury", tz); + timezones0.put("Pacific/Tongatapu", tz); + tz = new SimpleTimeZone(14000 * 3600, "Pacific/Kiritimati"); + timezones0.put("Pacific/Kiritimati", tz); } - String tzid = System.getProperty("user.timezone"); - - if (tzid == null) - tzid = getDefaultTimeZoneId(); - - if (tzid == null) - tzid = "GMT"; - - defaultZone = getTimeZone(tzid); + return timezones0; } + /* This method returns us a time zone id string which is in the form . The GMT offset is in seconds, except where it is evenly divisible @@ -986,7 +1000,7 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable public static TimeZone getTimeZone(String ID) { // First check timezones hash - TimeZone tz = (TimeZone) timezones.get(ID); + TimeZone tz = (TimeZone) timezones().get(ID); if (tz != null) { if (tz.getID().equals(ID)) @@ -999,7 +1013,7 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable // We also save the alias, so that we return the same // object again if getTimeZone is called with the same // alias. - timezones.put(ID, tz); + timezones().put(ID, tz); return tz; } @@ -1074,7 +1088,7 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable public static String[] getAvailableIDs(int rawOffset) { int count = 0; - Iterator iter = timezones.entrySet().iterator(); + Iterator iter = timezones().entrySet().iterator(); while (iter.hasNext()) { // Don't iterate the values, since we want to count @@ -1086,7 +1100,7 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable String[] ids = new String[count]; count = 0; - iter = timezones.entrySet().iterator(); + iter = timezones().entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); @@ -1103,7 +1117,7 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable public static String[] getAvailableIDs() { return (String[]) - timezones.keySet().toArray(new String[timezones.size()]); + timezones().keySet().toArray(new String[timezones().size()]); } /** @@ -1114,12 +1128,12 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable */ public static TimeZone getDefault() { - return defaultZone; + return defaultZone(); } public static void setDefault(TimeZone zone) { - defaultZone = zone; + defaultZone0 = zone; } /**