home *** CD-ROM | disk | FTP | other *** search
/ Apple Developer Connection Student Program / ADC Tools Sampler CD Disk 3 1999.iso / Metrowerks CodeWarrior / Java Support / Java_Source / Java2 / src / java / util / TimeZone.java < prev    next >
Encoding:
Java Source  |  1999-05-28  |  116.5 KB  |  1,953 lines  |  [TEXT/CWIE]

  1. /*
  2.  * @(#)TimeZone.java    1.38 98/09/30
  3.  *
  4.  * (C) Copyright Taligent, Inc. 1996 - All Rights Reserved
  5.  * (C) Copyright IBM Corp. 1996 - All Rights Reserved
  6.  *
  7.  * Portions copyright (c) 1996-1998 Sun Microsystems, Inc. All Rights Reserved.
  8.  *
  9.  *   The original version of this source code and documentation is copyrighted
  10.  * and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These
  11.  * materials are provided under terms of a License Agreement between Taligent
  12.  * and Sun. This technology is protected by multiple US and International
  13.  * patents. This notice and attribution to Taligent may not be removed.
  14.  *   Taligent is a registered trademark of Taligent, Inc.
  15.  *
  16.  * Permission to use, copy, modify, and distribute this software
  17.  * and its documentation for NON-COMMERCIAL purposes and without
  18.  * fee is hereby granted provided that this copyright notice
  19.  * appears in all copies. Please refer to the file "copyright.html"
  20.  * for further important copyright and licensing information.
  21.  *
  22.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  23.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  24.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  25.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  26.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  27.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  28.  *
  29.  */
  30.  
  31. package java.util;
  32. import java.io.Serializable;
  33. import java.lang.ref.SoftReference;
  34. import java.text.SimpleDateFormat;
  35. import java.text.NumberFormat;
  36. import java.text.ParsePosition;
  37.  
  38. /**
  39.  * <code>TimeZone</code> represents a time zone offset, and also figures out daylight
  40.  * savings.
  41.  *
  42.  * <p>
  43.  * Typically, you get a <code>TimeZone</code> using <code>getDefault</code>
  44.  * which creates a <code>TimeZone</code> based on the time zone where the program
  45.  * is running. For example, for a program running in Japan, <code>getDefault</code>
  46.  * creates a <code>TimeZone</code> object based on Japanese Standard Time.
  47.  *
  48.  * <p>
  49.  * You can also get a <code>TimeZone</code> using <code>getTimeZone</code> along
  50.  * with a time zone ID. For instance, the time zone ID for the Pacific
  51.  * Standard Time zone is "PST". So, you can get a PST <code>TimeZone</code> object
  52.  * with:
  53.  * <blockquote>
  54.  * <pre>
  55.  * TimeZone tz = TimeZone.getTimeZone("PST");
  56.  * </pre>
  57.  * </blockquote>
  58.  * You can use <code>getAvailableIDs</code> method to iterate through
  59.  * all the supported time zone IDs. You can then choose a
  60.  * supported ID to get a <code>TimeZone</code>.
  61.  * If the time zone you want is not represented by one of the
  62.  * supported IDs, then you can create a custom time zone ID with
  63.  * the following syntax:
  64.  *
  65.  * <blockquote>
  66.  * <pre>
  67.  * GMT[+|-]hh[[:]mm]
  68.  * </pre>
  69.  * </blockquote>
  70.  *
  71.  * For example, you might specify GMT+14:00 as a custom
  72.  * time zone ID.  The <code>TimeZone</code> that is returned
  73.  * when you specify a custom time zone ID does not include
  74.  * daylight savings time.
  75.  *
  76.  *
  77.  * @see          Calendar
  78.  * @see          GregorianCalendar
  79.  * @see          SimpleTimeZone
  80.  * @version      1.38 09/30/98
  81.  * @author       Mark Davis, David Goldsmith, Chen-Lieh Huang, Alan Liu
  82.  */
  83. abstract public class TimeZone implements Serializable, Cloneable {
  84.     /**
  85.      * Sole constructor.  (For invocation by subclass constructors, typically
  86.      * implicit.)
  87.      */
  88.     public TimeZone() {
  89.     }
  90.  
  91.     /**
  92.      * A style specifier for <code>getDisplayName()</code> indicating
  93.      * a short name, such as "PST."
  94.      * @see #LONG
  95.      */
  96.     public static final int SHORT = 0;
  97.  
  98.     /**
  99.      * A style specifier for <code>getDisplayName()</code> indicating
  100.      * a long name, such as "Pacific Standard Time."
  101.      * @see #SHORT
  102.      */
  103.     public static final int LONG  = 1;
  104.  
  105.     // Constants used internally; unit is milliseconds
  106.     private static final int ONE_MINUTE = 60*1000;
  107.     private static final int ONE_HOUR   = 60*ONE_MINUTE;
  108.     private static final int ONE_DAY    = 24*ONE_HOUR;
  109.  
  110.     /**
  111.      * Cache to hold the SimpleDateFormat objects for a Locale.
  112.      */
  113.     private static Hashtable cachedLocaleData = new Hashtable(3);
  114.  
  115.     // Proclaim serialization compatibility with JDK 1.1
  116.     static final long serialVersionUID = 3581463369166924961L;
  117.  
  118.     /**
  119.      * Gets the time zone offset, for current date, modified in case of
  120.      * daylight savings. This is the offset to add *to* UTC to get local time.
  121.      * @param era the era of the given date.
  122.      * @param year the year in the given date.
  123.      * @param month the month in the given date.
  124.      * Month is 0-based. e.g., 0 for January.
  125.      * @param day the day-in-month of the given date.
  126.      * @param dayOfWeek the day-of-week of the given date.
  127.      * @param milliseconds the millis in day in <em>standard</em> local time.
  128.      * @return the offset to add *to* GMT to get local time.
  129.      */
  130.     abstract public int getOffset(int era, int year, int month, int day,
  131.                                   int dayOfWeek, int milliseconds);
  132.  
  133.     /**
  134.      * Gets the time zone offset, for current date, modified in case of
  135.      * daylight savings. This is the offset to add *to* UTC to get local time.
  136.      * @param era the era of the given date.
  137.      * @param year the year in the given date.
  138.      * @param month the month in the given date.
  139.      * Month is 0-based. e.g., 0 for January.
  140.      * @param day the day-in-month of the given date.
  141.      * @param dayOfWeek the day-of-week of the given date.
  142.      * @param milliseconds the millis in day in <em>standard</em> local time.
  143.      * @param monthLength the length of the given month in days.
  144.      * @return the offset to add *to* GMT to get local time.
  145.      */
  146.     int getOffset(int era, int year, int month, int day,
  147.           int dayOfWeek, int milliseconds, int monthLength) {
  148.     // Default implementation which ignores the monthLength.
  149.     // SimpleTimeZone overrides this and actually uses monthLength.
  150.     return getOffset(era, year, month, day, dayOfWeek, milliseconds);
  151.     }
  152.     
  153.  
  154.     /**
  155.      * Sets the base time zone offset to GMT.
  156.      * This is the offset to add *to* UTC to get local time.
  157.      * @param offsetMillis the given base time zone offset to GMT.
  158.      */
  159.     abstract public void setRawOffset(int offsetMillis);
  160.  
  161.     /**
  162.      * Gets unmodified offset, NOT modified in case of daylight savings.
  163.      * This is the offset to add *to* UTC to get local time.
  164.      * @return the unmodified offset to add *to* UTC to get local time.
  165.      */
  166.     abstract public int getRawOffset();
  167.  
  168.     /**
  169.      * Gets the ID of this time zone.
  170.      * @return the ID of this time zone.
  171.      */
  172.     public String getID()
  173.     {
  174.         return ID;
  175.     }
  176.  
  177.     /**
  178.      * Sets the time zone ID. This does not change any other data in
  179.      * the time zone object.
  180.      * @param ID the new time zone ID.
  181.      */
  182.     public void setID(String ID)
  183.     {
  184.         this.ID = ID;
  185.     }
  186.  
  187.     /**
  188.      * Returns a name of this time zone suitable for presentation to the user
  189.      * in the default locale.
  190.      * This method returns the long name, not including daylight savings.
  191.      * If the display name is not available for the locale,
  192.      * then this method returns a string in the format
  193.      * <code>GMT[+-]hh:mm</code>.
  194.      * @return the human-readable name of this time zone in the default locale.
  195.      */
  196.     public final String getDisplayName() {
  197.         return getDisplayName(false, LONG, Locale.getDefault());
  198.     }
  199.  
  200.     /**
  201.      * Returns a name of this time zone suitable for presentation to the user
  202.      * in the specified locale.
  203.      * This method returns the long name, not including daylight savings.
  204.      * If the display name is not available for the locale,
  205.      * then this method returns a string in the format
  206.      * <code>GMT[+-]hh:mm</code>.
  207.      * @param locale the locale in which to supply the display name.
  208.      * @return the human-readable name of this time zone in the given locale
  209.      * or in the default locale if the given locale is not recognized.
  210.      */
  211.     public final String getDisplayName(Locale locale) {
  212.         return getDisplayName(false, LONG, locale);
  213.     }
  214.  
  215.     /**
  216.      * Returns a name of this time zone suitable for presentation to the user
  217.      * in the default locale.
  218.      * If the display name is not available for the locale,
  219.      * then this method returns a string in the format
  220.      * <code>GMT[+-]hh:mm</code>.
  221.      * @param daylight if true, return the daylight savings name.
  222.      * @param style either <code>LONG</code> or <code>SHORT</code>
  223.      * @return the human-readable name of this time zone in the default locale.
  224.      */
  225.     public final String getDisplayName(boolean daylight, int style) {
  226.         return getDisplayName(daylight, style, Locale.getDefault());
  227.     }
  228.  
  229.     /**
  230.      * Returns a name of this time zone suitable for presentation to the user
  231.      * in the specified locale.
  232.      * If the display name is not available for the locale,
  233.      * then this method returns a string in the format
  234.      * <code>GMT[+-]hh:mm</code>.
  235.      * @param daylight if true, return the daylight savings name.
  236.      * @param style either <code>LONG</code> or <code>SHORT</code>
  237.      * @param locale the locale in which to supply the display name.
  238.      * @return the human-readable name of this time zone in the given locale
  239.      * or in the default locale if the given locale is not recognized.
  240.      * @exception IllegalArgumentException style is invalid.
  241.      */
  242.     public String getDisplayName(boolean daylight, int style, Locale locale) {
  243.         /* NOTES:
  244.          * (1) We use SimpleDateFormat for simplicity; we could do this
  245.          * more efficiently but it would duplicate the SimpleDateFormat code
  246.          * here, which is undesirable.
  247.          * (2) Attempts to move the code from SimpleDateFormat to here also run
  248.          * aground because this requires SimpleDateFormat to keep a Locale
  249.          * object around, which it currently doesn't; to synthesize such a
  250.          * locale upon resurrection; and to somehow handle the special case of
  251.          * construction from a DateFormatSymbols object.
  252.          */
  253.         if (style != SHORT && style != LONG) {
  254.             throw new IllegalArgumentException("Illegal style: " + style);
  255.         }
  256.         // We keep a cache, indexed by locale.  The cache contains a
  257.         // SimpleDateFormat object, which we create on demand.
  258.         SoftReference data = (SoftReference)cachedLocaleData.get(locale);
  259.         SimpleDateFormat format;
  260.         if (data == null ||
  261.             (format = (SimpleDateFormat)data.get()) == null) {
  262.             format = new SimpleDateFormat(null, locale);
  263.             cachedLocaleData.put(locale, new SoftReference(format));
  264.         }
  265.         // Create a new SimpleTimeZone as a stand-in for this zone; the
  266.         // stand-in will have no DST, or all DST, but the same ID and offset,
  267.         // and hence the same display name.
  268.         // We don't cache these because they're small and cheap to create.
  269.         SimpleTimeZone tz = daylight ?
  270.             new SimpleTimeZone(getRawOffset(), getID(),
  271.                                Calendar.JANUARY, 1, 0, 0,
  272.                                Calendar.DECEMBER, 31, 0, ONE_DAY) :
  273.             new SimpleTimeZone(getRawOffset(), getID());
  274.         format.applyPattern(style == LONG ? "zzzz" : "z");      
  275.         format.getCalendar().setTimeZone(tz);
  276.         return format.format(new Date()); // Doesn't matter what date we use
  277.     }
  278.  
  279.     /**
  280.      * Queries if this time zone uses daylight savings time.
  281.      * @return true if this time zone uses daylight savings time,
  282.      * false, otherwise.
  283.      */
  284.     abstract public boolean useDaylightTime();
  285.  
  286.     /**
  287.      * Queries if the given date is in daylight savings time in
  288.      * this time zone.
  289.      * @param date the given Date.
  290.      * @return true if the given date is in daylight savings time,
  291.      * false, otherwise.
  292.      */
  293.     abstract public boolean inDaylightTime(Date date);
  294.  
  295.     /**
  296.      * Gets the <code>TimeZone</code> for the given ID.
  297.      * @param ID the ID for a <code>TimeZone</code>, either an abbreviation such as
  298.      * "PST", a full name such as "America/Los_Angeles", or a custom ID
  299.      * such as "GMT-8:00".
  300.      * @return the specified <code>TimeZone</code>, or the GMT zone if the given ID
  301.      * cannot be understood.
  302.      */
  303.     public static synchronized TimeZone getTimeZone(String ID) {
  304.         /* We first try to lookup the zone ID in our hashtable.  If this fails,
  305.          * we try to parse it as a custom string GMT[+-]hh:mm.  This allows us
  306.          * to recognize zones in user.timezone that otherwise cannot be
  307.          * identified.  We do the recognition here, rather than in getDefault(),
  308.          * so that the default zone is always the result of calling
  309.          * getTimeZone() with the property user.timezone.
  310.          *
  311.          * If all else fails, we return GMT, which is probably not what the user
  312.          * wants, but at least is a functioning TimeZone object. */
  313.         TimeZone zone = TimeZoneData.get(ID);
  314.         if (zone == null) zone = parseCustomTimeZone(ID);
  315.         if (zone == null) zone = (TimeZone)GMT.clone();
  316.         return zone;
  317.     }
  318.  
  319.     /**
  320.      * Gets the available IDs according to the given time zone offset.
  321.      * @param rawOffset the given time zone GMT offset.
  322.      * @return an array of IDs, where the time zone for that ID has
  323.      * the specified GMT offset. For example, "America/Phoenix" and "America/Denver"
  324.      * both have GMT-07:00, but differ in daylight savings behavior.
  325.      */
  326.     public static synchronized String[] getAvailableIDs(int rawOffset) {
  327.         int first = 0;
  328.         int limit;
  329.         int i = 0;
  330.         String[] result;
  331.  
  332.         /* The array TimeZoneData.zones is sorted by ascending raw offset.  Scan
  333.          * through the array, determining the first and limit (last+1) entries
  334.          * with the specified offset.  If there are no entries with the given
  335.          * offset, we will have first == limit.
  336.          */
  337.         while (first < TimeZoneData.zones.length
  338.                && TimeZoneData.zones[first].getRawOffset() < rawOffset) {
  339.             ++first;
  340.         }
  341.         limit = first;
  342.         while (limit < TimeZoneData.zones.length
  343.                && TimeZoneData.zones[limit].getRawOffset() == rawOffset) {
  344.             ++limit;
  345.         }
  346.         result = new String[limit - first];
  347.         while (first < limit) {
  348.             result[i++] = TimeZoneData.zones[first++].getID();
  349.         }
  350.         return result;
  351.     }
  352.  
  353.     /**
  354.      * Gets all the available IDs supported.
  355.      * @return an array of IDs.
  356.      */
  357.     public static synchronized String[] getAvailableIDs() {
  358.         String[]    resultArray = new String[TimeZoneData.zones.length];
  359.         int         count = 0;
  360.         for (int i = 0; i < TimeZoneData.zones.length; ++i)
  361.             resultArray[count++] = TimeZoneData.zones[i].getID();
  362.  
  363.         // copy into array of the right size and return
  364.         String[] finalResult = new String[count];
  365.         System.arraycopy(resultArray, 0, finalResult, 0, count);
  366.  
  367.         return finalResult;
  368.     }
  369.     
  370.     /**
  371.      * Gets the default <code>TimeZone</code> for this host.
  372.      * The source of the default <code>TimeZone</code> 
  373.      * may vary with implementation.
  374.      * @return a default <code>TimeZone</code>.
  375.      */
  376.     public static synchronized TimeZone getDefault() {
  377.         if (defaultZone == null) {
  378.             // get the ID from the system properties
  379.         String ID = (String) java.security.AccessController.doPrivileged(
  380.                new sun.security.action.GetPropertyAction("user.timezone"));
  381.             if (ID == null) ID = GMT_ID;
  382.             defaultZone = getTimeZone(ID);
  383.         }
  384.         return (TimeZone)defaultZone.clone();
  385.     }
  386.  
  387.     /**
  388.      * Sets the <code>TimeZone</code> that is
  389.      * returned by the <code>getDefault</code> method.
  390.      * @param zone the new default time zone
  391.      */
  392.     public static synchronized void setDefault(TimeZone zone)
  393.     {
  394.         defaultZone = zone;
  395.     }
  396.  
  397.     /**
  398.      * Returns true if this zone has the same rule and offset as another zone.
  399.      * That is, if this zone differs only in ID, if at all.
  400.      * @param other the <code>TimeZone</code> object to be compared with
  401.      * @return true if the given zone is the same as this one,
  402.      * with the possible exception of the ID
  403.      */
  404.     public boolean hasSameRules(TimeZone other) {
  405.         return getRawOffset() == other.getRawOffset() &&
  406.             useDaylightTime() == other.useDaylightTime();
  407.     }
  408.  
  409.     /**
  410.      * Overrides Cloneable
  411.      */
  412.     public Object clone()
  413.     {
  414.         try {
  415.             TimeZone other = (TimeZone) super.clone();
  416.             other.ID = ID;
  417.             return other;
  418.         } catch (CloneNotSupportedException e) {
  419.             throw new InternalError();
  420.         }
  421.     }
  422.  
  423.     // =======================privates===============================
  424.  
  425.     /**
  426.      * The string identifier of this <code>TimeZone</code>.  This is a
  427.      * programmatic identifier used internally to look up <code>TimeZone</code>
  428.      * objects from the system table and also to map them to their localized
  429.      * display names.  <code>ID</code> values are unique in the system
  430.      * table but may not be for dynamically created zones.
  431.      * @serial
  432.      */
  433.     private String           ID;
  434.     private static TimeZone  defaultZone = null;
  435.  
  436.     static final String         GMT_ID        = "GMT";
  437.     private static final int    GMT_ID_LENGTH = 3;
  438.     private static final String CUSTOM_ID     = "Custom";
  439.  
  440.     private static NumberFormat numberFormat = null;
  441.  
  442.     private static final TimeZone GMT = new SimpleTimeZone(0, GMT_ID);
  443.  
  444.     /**
  445.      * Parse a custom time zone identifier and return a corresponding zone.
  446.      * @param id a string of the form GMT[+-]hh:mm, GMT[+-]hhmm, or
  447.      * GMT[+-]hh.
  448.      * @return a newly created SimpleTimeZone with the given offset and
  449.      * no daylight savings time, or null if the id cannot be parsed.
  450.      */
  451.     private static final SimpleTimeZone parseCustomTimeZone(String id) {
  452.         if (id.length() > GMT_ID_LENGTH &&
  453.             id.regionMatches(true, 0, GMT_ID, 0, GMT_ID_LENGTH)) {
  454.             ParsePosition pos = new ParsePosition(GMT_ID_LENGTH);
  455.             boolean negative = false;
  456.             int offset;
  457.  
  458.             if (id.charAt(pos.getIndex()) == '-')
  459.                 negative = true;
  460.             else if (id.charAt(pos.getIndex()) != '+')
  461.                 return null;
  462.             pos.setIndex(pos.getIndex() + 1);
  463.  
  464.             // Create NumberFormat if necessary
  465.             synchronized (TimeZoneData.class) {
  466.                 if (numberFormat == null) {
  467.                     numberFormat = NumberFormat.getInstance();
  468.                     numberFormat.setParseIntegerOnly(true);
  469.                 }
  470.             }
  471.  
  472.             synchronized (numberFormat) {
  473.                 // Look for either hh:mm, hhmm, or hh
  474.                 int start = pos.getIndex();
  475.                 Number n = numberFormat.parse(id, pos);
  476.                 if (n == null) return null;
  477.                 offset = n.intValue();
  478.  
  479.                 if (pos.getIndex() < id.length() &&
  480.                     id.charAt(pos.getIndex()) == ':') {
  481.                     // hh:mm
  482.                     offset *= 60;
  483.                     pos.setIndex(pos.getIndex() + 1);
  484.                     n = numberFormat.parse(id, pos);
  485.                     if (n == null) return null;
  486.                     offset += n.intValue();
  487.                 }
  488.                 else {
  489.                     // hhmm or hh
  490.  
  491.                     // Be strict about interpreting something as hh; it must be
  492.                     // an offset < 30, and it must be one or two digits. Thus
  493.                     // 0010 is interpreted as 00:10, but 10 is interpreted as
  494.                     // 10:00.
  495.                     if (offset < 30 && (pos.getIndex() - start) <= 2)
  496.                         offset *= 60; // hh, from 00 to 29; 30 is 00:30
  497.                     else
  498.                         offset = offset % 100 + offset / 100 * 60; // hhmm
  499.                 }
  500.  
  501.                 if (negative) offset = -offset;
  502.                 return new SimpleTimeZone(offset * 60000, CUSTOM_ID);
  503.             }
  504.         }
  505.  
  506.         return null;
  507.     }
  508.  
  509.     // Internal Implementation Notes [LIU]
  510.     //
  511.     // TimeZone data is stored in two parts.  The first is an encoding of the
  512.     // rules for each TimeZone.  A TimeZone rule includes the offset of a zone
  513.     // in milliseconds from GMT, the starting month and day for daylight savings
  514.     // time, if there is any, and the ending month and day for daylight savings
  515.     // time.  The starting and ending days are specified in terms of the n-th
  516.     // day of the week, for instance, the first Sunday or the last ("-1"-th)
  517.     // Sunday of the month.  The rules are stored as statically-constructed
  518.     // SimpleTimeZone objects in the TimeZone class.
  519.     //
  520.     // Each rule has a unique internal identifier string which is used to
  521.     // specify it.  This identifier string is arbitrary, and is not to be shown
  522.     // to the user -- it is for programmatic use only.  In order to instantiate
  523.     // a TimeZone object, you pass its identifier string to
  524.     // TimeZone.getTimeZone().  (This identifier is also used to index the
  525.     // localized string data.)
  526.     //
  527.     // The second part of the data consists of localized string names used by
  528.     // DateFormat to describe various TimeZones.  A TimeZone may have up to four
  529.     // names: The abbreviated and long name for standard time in that zone, and
  530.     // the abbreviated and long name for daylight savings time in that zone.
  531.     // The data also includes a representative city.  For example, [ "PST",
  532.     // "Pacific Standard Time", "PDT", "Pacific Daylight Time", "Los Angeles" ]
  533.     // might be one such set of string names in the en_US locale.  These strings
  534.     // are intended to be shown to the user.  The string data is indexed in the
  535.     // system by a pair (String id, Locale locale).  The id is the unique string
  536.     // identifier for the rule for the given TimeZone (as passed to
  537.     // TimeZone.getTimeZone()).  String names are stored as localized resource
  538.     // data of the class java.text.resources.DateFormatZoneData???  where ??? is
  539.     // the Locale specifier (e.g., DateFormatZoneData_en_US).  This data is a
  540.     // two-dimensional array of strings with N rows and 6 columns.  The columns
  541.     // are id, short standard name, long standard name, short daylight name,
  542.     // long daylight name, representative city name.
  543.     //
  544.     // The mapping between rules (SimpleTimeZone objects) and localized string
  545.     // names (DateFormatZoneData objects) is one-to-many.  That is, there will
  546.     // sometimes be more than one localized string name sets associated with
  547.     // each rule.
  548.     //
  549.     // Each locale can potentially have localized name data for all time zones.
  550.     // Since we support approximately 90 time zones and approximately 50
  551.     // locales, there can be over 4500 sets of localized names.  In practice,
  552.     // only a fraction of these names are provided.  If a time zone needs to be
  553.     // displayed to the user in a given locale, and there is no string data in
  554.     // that locale for that time zone, then the default representation will be
  555.     // shown.  This is a string of the form GMT+HHMM or GMT-HHMM, where HHMM
  556.     // represents the offset in hours and minutes with respect to GMT.  This
  557.     // format is used because it is recognized in all locales.  In order to make
  558.     // this mechanism to work, the root resource data (in the class
  559.     // DateFormatZoneData) is left empty.
  560.     //
  561.     // The current default TimeZone is determined via the system property
  562.     // user.timezone.  This is set by the platform-dependent native code to
  563.     // a three-letter abbreviation.  We interpret these into our own internal
  564.     // IDs using a lookup table.
  565. }
  566.  
  567. /**
  568.  * Encapsulates data for international timezones.  This package-private class is for
  569.  * internal use only by TimeZone.  It encapsulates the list of recognized international
  570.  * timezones.  By implementing this as a separate class, the loading and initialization
  571.  * cost for this array is delayed until a TimeZone object is actually created from its ID.
  572.  * This class contains only static variables and static methods; it cannot be instantiated.
  573.  */
  574. class TimeZoneData
  575. {
  576.     static final TimeZone get(String ID) {
  577.         Object o = lookup.get(ID);
  578.         return o == null ? null : (TimeZone)((TimeZone)o).clone(); // [sic]
  579.     }
  580.  
  581.     // ---------------- BEGIN GENERATED DATA ----------------
  582.     private static final int ONE_HOUR = 60*60*1000;
  583.  
  584.     static SimpleTimeZone zones[] = {
  585.         // The following data is current as of 1998.
  586.         // Total Unix zones: 343
  587.         // Total Java zones: 289
  588.         // Not all Unix zones become Java zones due to duplication and overlap.
  589.         //----------------------------------------------------------
  590.         new SimpleTimeZone(-11*ONE_HOUR, "Pacific/Niue" /*NUT*/),
  591.         // Pacific/Niue Niue(NU)    -11:00  -   NUT
  592.         //----------------------------------------------------------
  593.         new SimpleTimeZone(-11*ONE_HOUR, "Pacific/Apia" /*WST*/),
  594.         // Pacific/Apia W Samoa(WS) -11:00  -   WST # W Samoa Time
  595.         new SimpleTimeZone(-11*ONE_HOUR, "MIT" /*alias for Pacific/Apia*/),
  596.         //----------------------------------------------------------
  597.         new SimpleTimeZone(-11*ONE_HOUR, "Pacific/Pago_Pago" /*SST*/),
  598.         // Pacific/Pago_Pago    American Samoa(US)  -11:00  -   SST # S=Samoa
  599.         //----------------------------------------------------------
  600.         new SimpleTimeZone(-10*ONE_HOUR, "Pacific/Tahiti" /*TAHT*/),
  601.         // Pacific/Tahiti   French Polynesia(PF)    -10:00  -   TAHT    # Tahiti Time
  602.         //----------------------------------------------------------
  603.         new SimpleTimeZone(-10*ONE_HOUR, "Pacific/Fakaofo" /*TKT*/),
  604.         // Pacific/Fakaofo  Tokelau Is(TK)  -10:00  -   TKT # Tokelau Time
  605.         //----------------------------------------------------------
  606.         new SimpleTimeZone(-10*ONE_HOUR, "Pacific/Honolulu" /*HST*/),
  607.         // Pacific/Honolulu Hawaii(US)  -10:00  -   HST
  608.         new SimpleTimeZone(-10*ONE_HOUR, "HST" /*alias for Pacific/Honolulu*/),
  609.         //----------------------------------------------------------
  610.         new SimpleTimeZone(-10*ONE_HOUR, "America/Adak" /*HA%sT*/,
  611.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  612.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  613.         // Rule US  1967    max -   Oct lastSun 2:00    0   S
  614.         // Rule US  1987    max -   Apr Sun>=1  2:00    1:00    D
  615.         // America/Adak Alaska(US)  -10:00  US  HA%sT
  616.         //----------------------------------------------------------
  617.         new SimpleTimeZone(-10*ONE_HOUR, "Pacific/Rarotonga" /*CK%sT*/,
  618.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR,
  619.           Calendar.MARCH, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR, (int)(0.5*ONE_HOUR)),
  620.         // Rule Cook    1979    max -   Mar Sun>=1  0:00    0   -
  621.         // Rule Cook    1979    max -   Oct lastSun 0:00    0:30    HS
  622.         // Pacific/Rarotonga    Cook Is(CK) -10:00  Cook    CK%sT
  623.         //----------------------------------------------------------
  624.         new SimpleTimeZone((int)(-9.5*ONE_HOUR), "Pacific/Marquesas" /*MART*/),
  625.         // Pacific/Marquesas    French Polynesia(PF)    -9:30   -   MART    # Marquesas Time
  626.         //----------------------------------------------------------
  627.         new SimpleTimeZone(-9*ONE_HOUR, "Pacific/Gambier" /*GAMT*/),
  628.         // Pacific/Gambier  French Polynesia(PF)    -9:00   -   GAMT    # Gambier Time
  629.         //----------------------------------------------------------
  630.         new SimpleTimeZone(-9*ONE_HOUR, "America/Anchorage" /*AK%sT*/,
  631.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  632.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  633.         // Rule US  1967    max -   Oct lastSun 2:00    0   S
  634.         // Rule US  1987    max -   Apr Sun>=1  2:00    1:00    D
  635.         // America/Anchorage    Alaska(US)  -9:00   US  AK%sT
  636.         new SimpleTimeZone(-9*ONE_HOUR, "AST" /*alias for America/Anchorage*/,
  637.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  638.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  639.         //----------------------------------------------------------
  640.         new SimpleTimeZone((int)(-8.5*ONE_HOUR), "Pacific/Pitcairn" /*PNT*/),
  641.         // Pacific/Pitcairn Pitcairn(PN)    -8:30   -   PNT # Pitcairn Time
  642.         //----------------------------------------------------------
  643.         new SimpleTimeZone(-8*ONE_HOUR, "America/Vancouver" /*P%sT*/,
  644.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  645.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  646.         // Rule Vanc    1962    max -   Oct lastSun 2:00    0   S
  647.         // Rule Vanc    1987    max -   Apr Sun>=1  2:00    1:00    D
  648.         // America/Vancouver    British Columbia(CA)    -8:00   Vanc    P%sT
  649.         //----------------------------------------------------------
  650.         new SimpleTimeZone(-8*ONE_HOUR, "America/Tijuana" /*P%sT*/,
  651.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  652.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  653.         // Rule Mexico  1996    max -   Apr Sun>=1  2:00    1:00    D
  654.         // Rule Mexico  1996    max -   Oct lastSun 2:00    0   S
  655.         // America/Tijuana  Mexico(MX)  -8:00   Mexico  P%sT
  656.         //----------------------------------------------------------
  657.         new SimpleTimeZone(-8*ONE_HOUR, "America/Los_Angeles" /*P%sT*/,
  658.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  659.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  660.         // Rule US  1967    max -   Oct lastSun 2:00    0   S
  661.         // Rule US  1987    max -   Apr Sun>=1  2:00    1:00    D
  662.         // America/Los_Angeles  US Pacific time, represented by Los Angeles(US) -8:00   US  P%sT
  663.         new SimpleTimeZone(-8*ONE_HOUR, "PST" /*alias for America/Los_Angeles*/,
  664.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  665.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  666.         //----------------------------------------------------------
  667.         new SimpleTimeZone(-7*ONE_HOUR, "America/Dawson_Creek" /*MST*/),
  668.         // America/Dawson_Creek British Columbia(CA)    -7:00   -   MST
  669.         //----------------------------------------------------------
  670.         new SimpleTimeZone(-7*ONE_HOUR, "America/Phoenix" /*MST*/),
  671.         // America/Phoenix  ?(US)   -7:00   -   MST
  672.         new SimpleTimeZone(-7*ONE_HOUR, "PNT" /*alias for America/Phoenix*/),
  673.         //----------------------------------------------------------
  674.         new SimpleTimeZone(-7*ONE_HOUR, "America/Edmonton" /*M%sT*/,
  675.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  676.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  677.         // Rule Edm 1972    max -   Oct lastSun 2:00    0   S
  678.         // Rule Edm 1987    max -   Apr Sun>=1  2:00    1:00    D
  679.         // America/Edmonton Alberta(CA) -7:00   Edm M%sT
  680.         //----------------------------------------------------------
  681.         new SimpleTimeZone(-7*ONE_HOUR, "America/Mazatlan" /*M%sT*/,
  682.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  683.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  684.         // Rule Mexico  1996    max -   Apr Sun>=1  2:00    1:00    D
  685.         // Rule Mexico  1996    max -   Oct lastSun 2:00    0   S
  686.         // America/Mazatlan Mexico(MX)  -7:00   Mexico  M%sT
  687.         //----------------------------------------------------------
  688.         new SimpleTimeZone(-7*ONE_HOUR, "America/Denver" /*M%sT*/,
  689.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  690.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  691.         // Rule US  1967    max -   Oct lastSun 2:00    0   S
  692.         // Rule US  1987    max -   Apr Sun>=1  2:00    1:00    D
  693.         // America/Denver   US Mountain time, represented by Denver(US) -7:00   US  M%sT
  694.         new SimpleTimeZone(-7*ONE_HOUR, "MST" /*alias for America/Denver*/,
  695.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  696.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  697.         //----------------------------------------------------------
  698.         new SimpleTimeZone(-6*ONE_HOUR, "America/Belize" /*C%sT*/),
  699.         // America/Belize   Belize(BZ)  -6:00   -   C%sT
  700.         //----------------------------------------------------------
  701.         new SimpleTimeZone(-6*ONE_HOUR, "America/Regina" /*CST*/),
  702.         // America/Regina   Saskatchewan(CA)    -6:00   -   CST
  703.         //----------------------------------------------------------
  704.         new SimpleTimeZone(-6*ONE_HOUR, "Pacific/Galapagos" /*GALT*/),
  705.         // Pacific/Galapagos    Ecuador(EC) -6:00   -   GALT    # Galapagos Time
  706.         //----------------------------------------------------------
  707.         new SimpleTimeZone(-6*ONE_HOUR, "America/Guatemala" /*C%sT*/),
  708.         // America/Guatemala    Guatemala(GT)   -6:00   -   C%sT
  709.         //----------------------------------------------------------
  710.         new SimpleTimeZone(-6*ONE_HOUR, "America/Tegucigalpa" /*C%sT*/),
  711.         // America/Tegucigalpa  Honduras(HN)    -6:00   -   C%sT
  712.         //----------------------------------------------------------
  713.         new SimpleTimeZone(-6*ONE_HOUR, "America/El_Salvador" /*C%sT*/),
  714.         // America/El_Salvador  El Salvador(SV) -6:00   -   C%sT
  715.         //----------------------------------------------------------
  716.         new SimpleTimeZone(-6*ONE_HOUR, "America/Costa_Rica" /*C%sT*/),
  717.         // America/Costa_Rica   Costa Rica(CR)  -6:00   -   C%sT
  718.         //----------------------------------------------------------
  719.         new SimpleTimeZone(-6*ONE_HOUR, "America/Winnipeg" /*C%sT*/,
  720.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  721.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  722.         // Rule Winn    1966    max -   Oct lastSun 2:00    0   S
  723.         // Rule Winn    1987    max -   Apr Sun>=1  2:00    1:00    D
  724.         // America/Winnipeg Manitoba(CA)    -6:00   Winn    C%sT
  725.         //----------------------------------------------------------
  726.         new SimpleTimeZone(-6*ONE_HOUR, "Pacific/Easter" /*EAS%sT*/,
  727.           Calendar.OCTOBER, 9, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR,
  728.           Calendar.MARCH, 9, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  729.         // Rule Chile   1969    max -   Oct Sun>=9  0:00    1:00    S
  730.         // Rule Chile   1970    max -   Mar Sun>=9  0:00    0   -
  731.         // Pacific/Easter   Chile(CL)   -6:00   Chile   EAS%sT
  732.         //----------------------------------------------------------
  733.         new SimpleTimeZone(-6*ONE_HOUR, "America/Mexico_City" /*C%sT*/,
  734.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  735.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  736.         // Rule Mexico  1996    max -   Apr Sun>=1  2:00    1:00    D
  737.         // Rule Mexico  1996    max -   Oct lastSun 2:00    0   S
  738.         // America/Mexico_City  Mexico(MX)  -6:00   Mexico  C%sT
  739.         //----------------------------------------------------------
  740.         new SimpleTimeZone(-6*ONE_HOUR, "America/Chicago" /*C%sT*/,
  741.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  742.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  743.         // Rule US  1967    max -   Oct lastSun 2:00    0   S
  744.         // Rule US  1987    max -   Apr Sun>=1  2:00    1:00    D
  745.         // America/Chicago  US Central time, represented by Chicago(US) -6:00   US  C%sT
  746.         new SimpleTimeZone(-6*ONE_HOUR, "CST" /*alias for America/Chicago*/,
  747.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  748.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  749.         //----------------------------------------------------------
  750.         new SimpleTimeZone(-5*ONE_HOUR, "America/Porto_Acre" /*AST*/),
  751.         // America/Porto_Acre   Brazil(BR)  -5:00   -   AST
  752.         //----------------------------------------------------------
  753.         new SimpleTimeZone(-5*ONE_HOUR, "America/Bogota" /*CO%sT*/),
  754.         // America/Bogota   Colombia(CO)    -5:00   -   CO%sT   # Colombia Time
  755.         //----------------------------------------------------------
  756.         new SimpleTimeZone(-5*ONE_HOUR, "America/Guayaquil" /*ECT*/),
  757.         // America/Guayaquil    Ecuador(EC) -5:00   -   ECT # Ecuador Time
  758.         //----------------------------------------------------------
  759.         new SimpleTimeZone(-5*ONE_HOUR, "America/Jamaica" /*EST*/),
  760.         // America/Jamaica  Jamaica(JM) -5:00   -   EST
  761.         //----------------------------------------------------------
  762.         new SimpleTimeZone(-5*ONE_HOUR, "America/Cayman" /*EST*/),
  763.         // America/Cayman   Cayman Is(KY)   -5:00   -   EST
  764.         //----------------------------------------------------------
  765.         new SimpleTimeZone(-5*ONE_HOUR, "America/Managua" /*EST*/),
  766.         // America/Managua  Nicaragua(NI)   -5:00   -   EST
  767.         //----------------------------------------------------------
  768.         new SimpleTimeZone(-5*ONE_HOUR, "America/Panama" /*EST*/),
  769.         // America/Panama   Panama(PA)  -5:00   -   EST
  770.         //----------------------------------------------------------
  771.         new SimpleTimeZone(-5*ONE_HOUR, "America/Lima" /*PE%sT*/),
  772.         // America/Lima Peru(PE)    -5:00   -   PE%sT   # Peru Time
  773.         //----------------------------------------------------------
  774.         new SimpleTimeZone(-5*ONE_HOUR, "America/Indianapolis" /*EST*/),
  775.         // America/Indianapolis Indiana(US) -5:00   -   EST
  776.         new SimpleTimeZone(-5*ONE_HOUR, "IET" /*alias for America/Indianapolis*/),
  777.         //----------------------------------------------------------
  778.         new SimpleTimeZone(-5*ONE_HOUR, "America/Nassau" /*E%sT*/,
  779.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  780.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  781.         // Rule Bahamas 1964    max -   Oct lastSun 2:00    0   S
  782.         // Rule Bahamas 1987    max -   Apr Sun>=1  2:00    1:00    D
  783.         // America/Nassau   Bahamas(BS) -5:00   Bahamas E%sT
  784.         //----------------------------------------------------------
  785.         new SimpleTimeZone(-5*ONE_HOUR, "America/Montreal" /*E%sT*/,
  786.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  787.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  788.         // Rule Mont    1957    max -   Oct lastSun 2:00    0   S
  789.         // Rule Mont    1987    max -   Apr Sun>=1  2:00    1:00    D
  790.         // America/Montreal Ontario, Quebec(CA) -5:00   Mont    E%sT
  791.         //----------------------------------------------------------
  792.         new SimpleTimeZone(-5*ONE_HOUR, "America/Havana" /*C%sT*/,
  793.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR,
  794.           Calendar.OCTOBER, 8, -Calendar.SUNDAY /*DOW>=DOM*/, 1*ONE_HOUR, 1*ONE_HOUR),
  795.         // Rule Cuba    1990    max -   Apr Sun>=1  0:00    1:00    D
  796.         // Rule Cuba    1997    max -   Oct Sun>=8  0:00s   0   S
  797.         // America/Havana   Cuba(CU)    -5:00   Cuba    C%sT
  798.         //----------------------------------------------------------
  799.         new SimpleTimeZone(-5*ONE_HOUR, "America/Port-au-Prince" /*E%sT*/,
  800.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 1*ONE_HOUR,
  801.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  802.         // Rule Haiti   1988    max -   Apr Sun>=1  1:00s   1:00    D
  803.         // Rule Haiti   1988    max -   Oct lastSun 1:00s   0   S
  804.         // America/Port-au-Prince   Haiti(HT)   -5:00   Haiti   E%sT
  805.         //----------------------------------------------------------
  806.         new SimpleTimeZone(-5*ONE_HOUR, "America/Grand_Turk" /*E%sT*/,
  807.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR,
  808.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  809.         // Rule TC  1979    max -   Oct lastSun 0:00    0   S
  810.         // Rule TC  1987    max -   Apr Sun>=1  0:00    1:00    D
  811.         // America/Grand_Turk   Turks and Caicos(TC)    -5:00   TC  E%sT
  812.         //----------------------------------------------------------
  813.         new SimpleTimeZone(-5*ONE_HOUR, "America/New_York" /*E%sT*/,
  814.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  815.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  816.         // Rule US  1967    max -   Oct lastSun 2:00    0   S
  817.         // Rule US  1987    max -   Apr Sun>=1  2:00    1:00    D
  818.         // America/New_York US Eastern time, represented by New York(US)    -5:00   US  E%sT
  819.         new SimpleTimeZone(-5*ONE_HOUR, "EST" /*alias for America/New_York*/,
  820.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  821.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  822.         //----------------------------------------------------------
  823.         new SimpleTimeZone(-4*ONE_HOUR, "America/Antigua" /*AST*/),
  824.         // America/Antigua  Antigua and Barbuda(AG) -4:00   -   AST
  825.         //----------------------------------------------------------
  826.         new SimpleTimeZone(-4*ONE_HOUR, "America/Anguilla" /*AST*/),
  827.         // America/Anguilla Anguilla(AI)    -4:00   -   AST
  828.         //----------------------------------------------------------
  829.         new SimpleTimeZone(-4*ONE_HOUR, "America/Curacao" /*AST*/),
  830.         // America/Curacao  Curacao(AN) -4:00   -   AST
  831.         //----------------------------------------------------------
  832.         new SimpleTimeZone(-4*ONE_HOUR, "America/Aruba" /*AST*/),
  833.         // America/Aruba    Aruba(AW)   -4:00   -   AST
  834.         //----------------------------------------------------------
  835.         new SimpleTimeZone(-4*ONE_HOUR, "America/Barbados" /*A%sT*/),
  836.         // America/Barbados Barbados(BB)    -4:00   -   A%sT
  837.         //----------------------------------------------------------
  838.         new SimpleTimeZone(-4*ONE_HOUR, "America/La_Paz" /*BOT*/),
  839.         // America/La_Paz   Bolivia(BO) -4:00   -   BOT # Bolivia Time
  840.         //----------------------------------------------------------
  841.         new SimpleTimeZone(-4*ONE_HOUR, "America/Manaus" /*WST*/),
  842.         // America/Manaus   Brazil(BR)  -4:00   -   WST
  843.         //----------------------------------------------------------
  844.         new SimpleTimeZone(-4*ONE_HOUR, "America/Dominica" /*AST*/),
  845.         // America/Dominica Dominica(DM)    -4:00   -   AST
  846.         //----------------------------------------------------------
  847.         new SimpleTimeZone(-4*ONE_HOUR, "America/Santo_Domingo" /*AST*/),
  848.         // America/Santo_Domingo    Dominican Republic(DO)  -4:00   -   AST
  849.         //----------------------------------------------------------
  850.         new SimpleTimeZone(-4*ONE_HOUR, "America/Grenada" /*AST*/),
  851.         // America/Grenada  Grenada(GD) -4:00   -   AST
  852.         //----------------------------------------------------------
  853.         new SimpleTimeZone(-4*ONE_HOUR, "America/Guadeloupe" /*AST*/),
  854.         // America/Guadeloupe   Guadeloupe(GP)  -4:00   -   AST
  855.         //----------------------------------------------------------
  856.         new SimpleTimeZone(-4*ONE_HOUR, "America/Guyana" /*GYT*/),
  857.         // America/Guyana   Guyana(GY)  -4:00   -   GYT
  858.         //----------------------------------------------------------
  859.         new SimpleTimeZone(-4*ONE_HOUR, "America/St_Kitts" /*AST*/),
  860.         // America/St_Kitts St Kitts-Nevis(KN)  -4:00   -   AST
  861.         //----------------------------------------------------------
  862.         new SimpleTimeZone(-4*ONE_HOUR, "America/St_Lucia" /*AST*/),
  863.         // America/St_Lucia St Lucia(LC)    -4:00   -   AST
  864.         //----------------------------------------------------------
  865.         new SimpleTimeZone(-4*ONE_HOUR, "America/Martinique" /*AST*/),
  866.         // America/Martinique   Martinique(MQ)  -4:00   -   AST
  867.         //----------------------------------------------------------
  868.         new SimpleTimeZone(-4*ONE_HOUR, "America/Montserrat" /*AST*/),
  869.         // America/Montserrat   Montserrat(MS)  -4:00   -   AST
  870.         //----------------------------------------------------------
  871.         new SimpleTimeZone(-4*ONE_HOUR, "America/Puerto_Rico" /*AST*/),
  872.         // America/Puerto_Rico  Puerto Rico(PR) -4:00   -   AST
  873.         new SimpleTimeZone(-4*ONE_HOUR, "PRT" /*alias for America/Puerto_Rico*/),
  874.         //----------------------------------------------------------
  875.         new SimpleTimeZone(-4*ONE_HOUR, "America/Port_of_Spain" /*AST*/),
  876.         // America/Port_of_Spain    Trinidad and Tobago(TT) -4:00   -   AST
  877.         //----------------------------------------------------------
  878.         new SimpleTimeZone(-4*ONE_HOUR, "America/St_Vincent" /*AST*/),
  879.         // America/St_Vincent   St Vincent and the Grenadines(VC)   -4:00   -   AST
  880.         //----------------------------------------------------------
  881.         new SimpleTimeZone(-4*ONE_HOUR, "America/Tortola" /*AST*/),
  882.         // America/Tortola  British Virgin Is(VG)   -4:00   -   AST
  883.         //----------------------------------------------------------
  884.         new SimpleTimeZone(-4*ONE_HOUR, "America/St_Thomas" /*AST*/),
  885.         // America/St_Thomas    Virgin Is(VI)   -4:00   -   AST
  886.         //----------------------------------------------------------
  887.         new SimpleTimeZone(-4*ONE_HOUR, "America/Caracas" /*VET*/),
  888.         // America/Caracas  Venezuela(VE)   -4:00   -   VET
  889.         //----------------------------------------------------------
  890.         new SimpleTimeZone(-4*ONE_HOUR, "Antarctica/Palmer" /*CL%sT*/,
  891.           Calendar.OCTOBER, 9, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR,
  892.           Calendar.MARCH, 9, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  893.         // Rule ChileAQ 1969    max -   Oct Sun>=9  0:00    1:00    S
  894.         // Rule ChileAQ 1970    max -   Mar Sun>=9  0:00    0   -
  895.         // Antarctica/Palmer    USA - year-round bases(AQ)  -4:00   ChileAQ CL%sT
  896.         //----------------------------------------------------------
  897.         new SimpleTimeZone(-4*ONE_HOUR, "Atlantic/Bermuda" /*A%sT*/,
  898.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  899.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  900.         // Rule Bahamas 1964    max -   Oct lastSun 2:00    0   S
  901.         // Rule Bahamas 1987    max -   Apr Sun>=1  2:00    1:00    D
  902.         // Atlantic/Bermuda Bermuda(BM) -4:00   Bahamas A%sT
  903.         //----------------------------------------------------------
  904.         new SimpleTimeZone(-4*ONE_HOUR, "America/Cuiaba" /*W%sT*/,
  905.           Calendar.OCTOBER, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR,
  906.           Calendar.FEBRUARY, 11, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  907.         // Rule Brazil  1998    max -   Oct Sun>=1  0:00    1:00    D
  908.         // Rule Brazil  1999    max -   Feb Sun>=11 0:00    0   S
  909.         // America/Cuiaba   Brazil(BR)  -4:00   Brazil  W%sT
  910.         //----------------------------------------------------------
  911.         new SimpleTimeZone(-4*ONE_HOUR, "America/Halifax" /*A%sT*/,
  912.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  913.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  914.         // Rule Halifax 1962    max -   Oct lastSun 2:00    0   S
  915.         // Rule Halifax 1987    max -   Apr Sun>=1  2:00    1:00    D
  916.         // America/Halifax  ?(CA)   -4:00   Halifax A%sT
  917.         //----------------------------------------------------------
  918.         new SimpleTimeZone(-4*ONE_HOUR, "Atlantic/Stanley" /*FK%sT*/,
  919.           Calendar.SEPTEMBER, 8, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR,
  920.           Calendar.APRIL, 16, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  921.         // Rule Falk    1986    max -   Apr Sun>=16 0:00    0   -
  922.         // Rule Falk    1996    max -   Sep Sun>=8  0:00    1:00    S
  923.         // Atlantic/Stanley Falklands(FK)   -4:00   Falk    FK%sT
  924.         //----------------------------------------------------------
  925.         new SimpleTimeZone(-4*ONE_HOUR, "America/Thule" /*A%sT*/,
  926.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  927.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  928.         // Rule Thule   1993    max -   Apr Sun>=1  2:00    1:00    D
  929.         // Rule Thule   1993    max -   Oct lastSun 2:00    0   S
  930.         // America/Thule    ?(GL)   -4:00   Thule   A%sT
  931.         //----------------------------------------------------------
  932.         new SimpleTimeZone(-4*ONE_HOUR, "America/Asuncion" /*PY%sT*/,
  933.           Calendar.OCTOBER, 1, 0 /*DOM*/, 0*ONE_HOUR,
  934.           Calendar.MARCH, 1, 0 /*DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  935.         // Rule Para    1996    max -   Mar 1   0:00    0   -
  936.         // Rule Para    1997    max -   Oct 1   0:00    1:00    S
  937.         // America/Asuncion Paraguay(PY)    -4:00   Para    PY%sT
  938.         //----------------------------------------------------------
  939.         new SimpleTimeZone(-4*ONE_HOUR, "America/Santiago" /*CL%sT*/,
  940.           Calendar.OCTOBER, 9, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR,
  941.           Calendar.MARCH, 9, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  942.         // Rule Chile   1969    max -   Oct Sun>=9  0:00    1:00    S
  943.         // Rule Chile   1970    max -   Mar Sun>=9  0:00    0   -
  944.         // America/Santiago Chile(CL)   -4:00   Chile   CL%sT
  945.         //----------------------------------------------------------
  946.         new SimpleTimeZone((int)(-3.5*ONE_HOUR), "America/St_Johns" /*N%sT*/,
  947.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  948.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  949.         // Rule StJohns 1960    max -   Oct lastSun 2:00    0   S
  950.         // Rule StJohns 1989    max -   Apr Sun>=1  2:00    1:00    D
  951.         // America/St_Johns Canada(CA)  -3:30   StJohns N%sT
  952.         new SimpleTimeZone((int)(-3.5*ONE_HOUR), "CNT" /*alias for America/St_Johns*/,
  953.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  954.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  955.         //----------------------------------------------------------
  956.         new SimpleTimeZone(-3*ONE_HOUR, "America/Fortaleza" /*EST*/),
  957.         // America/Fortaleza    Brazil(BR)  -3:00   -   EST
  958.         //----------------------------------------------------------
  959.         new SimpleTimeZone(-3*ONE_HOUR, "America/Cayenne" /*GFT*/),
  960.         // America/Cayenne  French Guiana(GF)   -3:00   -   GFT
  961.         //----------------------------------------------------------
  962.         new SimpleTimeZone(-3*ONE_HOUR, "America/Paramaribo" /*SRT*/),
  963.         // America/Paramaribo   Suriname(SR)    -3:00   -   SRT
  964.         //----------------------------------------------------------
  965.         new SimpleTimeZone(-3*ONE_HOUR, "America/Montevideo" /*UY%sT*/),
  966.         // America/Montevideo   Uruguay(UY) -3:00   -   UY%sT
  967.         //----------------------------------------------------------
  968.         new SimpleTimeZone(-3*ONE_HOUR, "America/Buenos_Aires" /*AR%sT*/),
  969.         // America/Buenos_Aires Argentina(AR)   -3:00   -   AR%sT
  970.         new SimpleTimeZone(-3*ONE_HOUR, "AGT" /*alias for America/Buenos_Aires*/),
  971.         //----------------------------------------------------------
  972.         new SimpleTimeZone(-3*ONE_HOUR, "America/Godthab" /*WG%sT*/,
  973.           Calendar.MARCH, -1, Calendar.SATURDAY /*DOW_IN_DOM*/, 22*ONE_HOUR,
  974.           Calendar.OCTOBER, -1, Calendar.SATURDAY /*DOW_IN_DOM*/, 22*ONE_HOUR, 1*ONE_HOUR),
  975.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  976.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  977.         // America/Godthab  ?(GL)   -3:00   EU  WG%sT
  978.         //----------------------------------------------------------
  979.         new SimpleTimeZone(-3*ONE_HOUR, "America/Miquelon" /*PM%sT*/,
  980.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  981.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  982.         // Rule Mont    1957    max -   Oct lastSun 2:00    0   S
  983.         // Rule Mont    1987    max -   Apr Sun>=1  2:00    1:00    D
  984.         // America/Miquelon St Pierre and Miquelon(PM)  -3:00   Mont    PM%sT   # Pierre & Miquelon Time
  985.         //----------------------------------------------------------
  986.         new SimpleTimeZone(-3*ONE_HOUR, "America/Sao_Paulo" /*E%sT*/,
  987.           Calendar.OCTOBER, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR,
  988.           Calendar.FEBRUARY, 11, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  989.         // Rule Brazil  1998    max -   Oct Sun>=1  0:00    1:00    D
  990.         // Rule Brazil  1999    max -   Feb Sun>=11 0:00    0   S
  991.         // America/Sao_Paulo    Brazil(BR)  -3:00   Brazil  E%sT
  992.         new SimpleTimeZone(-3*ONE_HOUR, "BET" /*alias for America/Sao_Paulo*/,
  993.           Calendar.OCTOBER, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR,
  994.           Calendar.FEBRUARY, 11, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  995.         //----------------------------------------------------------
  996.         new SimpleTimeZone(-2*ONE_HOUR, "America/Noronha" /*FST*/),
  997.         // America/Noronha  Brazil(BR)  -2:00   -   FST
  998.         //----------------------------------------------------------
  999.         new SimpleTimeZone(-2*ONE_HOUR, "Atlantic/South_Georgia" /*GST*/),
  1000.         // Atlantic/South_Georgia   South Georgia(GS)   -2:00   -   GST # South Georgia Time
  1001.         //----------------------------------------------------------
  1002.         new SimpleTimeZone(-1*ONE_HOUR, "Atlantic/Jan_Mayen" /*EGT*/),
  1003.         // Atlantic/Jan_Mayen   ?(NO)   -1:00   -   EGT
  1004.         //----------------------------------------------------------
  1005.         new SimpleTimeZone(-1*ONE_HOUR, "Atlantic/Cape_Verde" /*CVT*/),
  1006.         // Atlantic/Cape_Verde  Cape Verde(CV)  -1:00   -   CVT
  1007.         //----------------------------------------------------------
  1008.         new SimpleTimeZone(-1*ONE_HOUR, "America/Scoresbysund" /*EG%sT*/,
  1009.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR,
  1010.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1011.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1012.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1013.         // America/Scoresbysund ?(GL)   -1:00   EU  EG%sT
  1014.         //----------------------------------------------------------
  1015.         new SimpleTimeZone(-1*ONE_HOUR, "Atlantic/Azores" /*AZO%sT*/,
  1016.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR,
  1017.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1018.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1019.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1020.         // Atlantic/Azores  Portugal(PT)    -1:00   EU  AZO%sT
  1021.         //----------------------------------------------------------
  1022.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Ouagadougou" /*GMT*/),
  1023.         // Africa/Ouagadougou   Burkina Faso(BF)    0:00    -   GMT
  1024.         //----------------------------------------------------------
  1025.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Abidjan" /*GMT*/),
  1026.         // Africa/Abidjan   Cote D'Ivoire(CI)   0:00    -   GMT
  1027.         //----------------------------------------------------------
  1028.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Accra" /*%s*/),
  1029.         // Africa/Accra Ghana(GH)   0:00    -   %s
  1030.         //----------------------------------------------------------
  1031.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Banjul" /*GMT*/),
  1032.         // Africa/Banjul    Gambia(GM)  0:00    -   GMT
  1033.         //----------------------------------------------------------
  1034.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Conakry" /*GMT*/),
  1035.         // Africa/Conakry   Guinea(GN)  0:00    -   GMT
  1036.         //----------------------------------------------------------
  1037.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Bissau" /*GMT*/),
  1038.         // Africa/Bissau    Guinea-Bissau(GW)   0:00    -   GMT
  1039.         //----------------------------------------------------------
  1040.         new SimpleTimeZone(0*ONE_HOUR, "Atlantic/Reykjavik" /*GMT*/),
  1041.         // Atlantic/Reykjavik   Iceland(IS) 0:00    -   GMT
  1042.         //----------------------------------------------------------
  1043.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Monrovia" /*GMT*/),
  1044.         // Africa/Monrovia  Liberia(LR) 0:00    -   GMT
  1045.         //----------------------------------------------------------
  1046.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Casablanca" /*WET*/),
  1047.         // Africa/Casablanca    Morocco(MA) 0:00    -   WET
  1048.         //----------------------------------------------------------
  1049.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Timbuktu" /*GMT*/),
  1050.         // Africa/Timbuktu  Mali(ML)    0:00    -   GMT
  1051.         //----------------------------------------------------------
  1052.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Nouakchott" /*GMT*/),
  1053.         // Africa/Nouakchott    Mauritania(MR)  0:00    -   GMT
  1054.         //----------------------------------------------------------
  1055.         new SimpleTimeZone(0*ONE_HOUR, "Atlantic/St_Helena" /*GMT*/),
  1056.         // Atlantic/St_Helena   St Helena(SH)   0:00    -   GMT
  1057.         //----------------------------------------------------------
  1058.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Freetown" /*%s*/),
  1059.         // Africa/Freetown  Sierra Leone(SL)    0:00    -   %s
  1060.         //----------------------------------------------------------
  1061.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Dakar" /*GMT*/),
  1062.         // Africa/Dakar Senegal(SN) 0:00    -   GMT
  1063.         //----------------------------------------------------------
  1064.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Sao_Tome" /*GMT*/),
  1065.         // Africa/Sao_Tome  Sao Tome and Principe(ST)   0:00    -   GMT
  1066.         //----------------------------------------------------------
  1067.         new SimpleTimeZone(0*ONE_HOUR, "Africa/Lome" /*GMT*/),
  1068.         // Africa/Lome  Togo(TG)    0:00    -   GMT
  1069.         //----------------------------------------------------------
  1070.         new SimpleTimeZone(0*ONE_HOUR, "GMT" /*GMT*/),
  1071.         // GMT  -(-)    0:00    -   GMT
  1072.         new SimpleTimeZone(0*ONE_HOUR, "UTC" /*alias for GMT*/),
  1073.         //----------------------------------------------------------
  1074.         new SimpleTimeZone(0*ONE_HOUR, "Atlantic/Faeroe" /*WE%sT*/,
  1075.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 1*ONE_HOUR,
  1076.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 1*ONE_HOUR, 1*ONE_HOUR),
  1077.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1078.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1079.         // Atlantic/Faeroe  Denmark, Faeroe Islands, and Greenland(DK)  0:00    EU  WE%sT
  1080.         //----------------------------------------------------------
  1081.         new SimpleTimeZone(0*ONE_HOUR, "Atlantic/Canary" /*WE%sT*/,
  1082.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 1*ONE_HOUR,
  1083.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 1*ONE_HOUR, 1*ONE_HOUR),
  1084.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1085.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1086.         // Atlantic/Canary  Spain(ES)   0:00    EU  WE%sT
  1087.         //----------------------------------------------------------
  1088.         new SimpleTimeZone(0*ONE_HOUR, "Europe/Dublin" /*GMT/IST*/,
  1089.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 1*ONE_HOUR,
  1090.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 1*ONE_HOUR, 1*ONE_HOUR),
  1091.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1092.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1093.         // Europe/Dublin    ---(IE) 0:00    EU  GMT/IST
  1094.         //----------------------------------------------------------
  1095.         new SimpleTimeZone(0*ONE_HOUR, "Europe/Lisbon" /*WE%sT*/,
  1096.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 1*ONE_HOUR,
  1097.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 1*ONE_HOUR, 1*ONE_HOUR),
  1098.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1099.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1100.         // Europe/Lisbon    Portugal(PT)    0:00    EU  WE%sT
  1101.         //----------------------------------------------------------
  1102.         new SimpleTimeZone(0*ONE_HOUR, "Europe/London" /*GMT/BST*/,
  1103.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 1*ONE_HOUR,
  1104.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 1*ONE_HOUR, 1*ONE_HOUR),
  1105.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1106.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1107.         // Europe/London    ---(GB) 0:00    EU  GMT/BST
  1108.         //----------------------------------------------------------
  1109.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Luanda" /*WAT*/),
  1110.         // Africa/Luanda    Angola(AO)  1:00    -   WAT
  1111.         //----------------------------------------------------------
  1112.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Porto-Novo" /*WAT*/),
  1113.         // Africa/Porto-Novo    Benin(BJ)   1:00    -   WAT
  1114.         //----------------------------------------------------------
  1115.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Bangui" /*WAT*/),
  1116.         // Africa/Bangui    Central African Republic(CF)    1:00    -   WAT
  1117.         //----------------------------------------------------------
  1118.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Kinshasa" /*WAT*/),
  1119.         // Africa/Kinshasa  Democratic Republic of Congo(CG)    1:00    -   WAT
  1120.         //----------------------------------------------------------
  1121.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Douala" /*WAT*/),
  1122.         // Africa/Douala    Cameroon(CM)    1:00    -   WAT
  1123.         //----------------------------------------------------------
  1124.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Libreville" /*WAT*/),
  1125.         // Africa/Libreville    Gabon(GA)   1:00    -   WAT
  1126.         //----------------------------------------------------------
  1127.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Malabo" /*WAT*/),
  1128.         // Africa/Malabo    Equatorial Guinea(GQ)   1:00    -   WAT
  1129.         //----------------------------------------------------------
  1130.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Niamey" /*WAT*/),
  1131.         // Africa/Niamey    Niger(NE)   1:00    -   WAT
  1132.         //----------------------------------------------------------
  1133.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Lagos" /*WAT*/),
  1134.         // Africa/Lagos Nigeria(NG) 1:00    -   WAT
  1135.         //----------------------------------------------------------
  1136.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Ndjamena" /*WAT*/),
  1137.         // Africa/Ndjamena  Chad(TD)    1:00    -   WAT
  1138.         //----------------------------------------------------------
  1139.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Tunis" /*CE%sT*/),
  1140.         // Africa/Tunis Tunisia(TN) 1:00    -   CE%sT
  1141.         //----------------------------------------------------------
  1142.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Algiers" /*CET*/),
  1143.         // Africa/Algiers   Algeria(DZ) 1:00    -   CET
  1144.         //----------------------------------------------------------
  1145.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Andorra" /*CE%sT*/,
  1146.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1147.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1148.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1149.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1150.         // Europe/Andorra   Andorra(AD) 1:00    EU  CE%sT
  1151.         //----------------------------------------------------------
  1152.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Tirane" /*CE%sT*/,
  1153.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1154.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1155.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1156.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1157.         // Europe/Tirane    Albania(AL) 1:00    EU  CE%sT
  1158.         //----------------------------------------------------------
  1159.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Vienna" /*CE%sT*/,
  1160.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1161.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1162.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1163.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1164.         // Europe/Vienna    Austria(AT) 1:00    EU  CE%sT
  1165.         //----------------------------------------------------------
  1166.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Brussels" /*CE%sT*/,
  1167.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1168.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1169.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1170.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1171.         // Europe/Brussels  Belgium(BE) 1:00    EU  CE%sT
  1172.         //----------------------------------------------------------
  1173.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Zurich" /*CE%sT*/,
  1174.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1175.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1176.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1177.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1178.         // Europe/Zurich    Switzerland(CH) 1:00    EU  CE%sT
  1179.         //----------------------------------------------------------
  1180.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Prague" /*CE%sT*/,
  1181.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1182.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1183.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1184.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1185.         // Europe/Prague    Czech Republic(CZ)  1:00    EU  CE%sT
  1186.         //----------------------------------------------------------
  1187.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Berlin" /*CE%sT*/,
  1188.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1189.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1190.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1191.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1192.         // Europe/Berlin    Germany(DE) 1:00    EU  CE%sT
  1193.         //----------------------------------------------------------
  1194.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Copenhagen" /*CE%sT*/,
  1195.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1196.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1197.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1198.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1199.         // Europe/Copenhagen    Denmark, Faeroe Islands, and Greenland(DK)  1:00    EU  CE%sT
  1200.         //----------------------------------------------------------
  1201.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Madrid" /*CE%sT*/,
  1202.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1203.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1204.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1205.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1206.         // Europe/Madrid    Spain(ES)   1:00    EU  CE%sT
  1207.         //----------------------------------------------------------
  1208.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Gibraltar" /*CE%sT*/,
  1209.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1210.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1211.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1212.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1213.         // Europe/Gibraltar Gibraltar(GI)   1:00    EU  CE%sT
  1214.         //----------------------------------------------------------
  1215.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Budapest" /*CE%sT*/,
  1216.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1217.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1218.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1219.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1220.         // Europe/Budapest  Hungary(HU) 1:00    EU  CE%sT
  1221.         //----------------------------------------------------------
  1222.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Rome" /*CE%sT*/,
  1223.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1224.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1225.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1226.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1227.         // Europe/Rome  Italy(IT)   1:00    EU  CE%sT
  1228.         //----------------------------------------------------------
  1229.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Vaduz" /*CE%sT*/,
  1230.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1231.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1232.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1233.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1234.         // Europe/Vaduz Liechtenstein(LI)   1:00    EU  CE%sT
  1235.         //----------------------------------------------------------
  1236.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Luxembourg" /*CE%sT*/,
  1237.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1238.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1239.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1240.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1241.         // Europe/Luxembourg    Luxembourg(LU)  1:00    EU  CE%sT
  1242.         //----------------------------------------------------------
  1243.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Tripoli" /*CE%sT*/,
  1244.           Calendar.MARCH, -1, Calendar.THURSDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1245.           Calendar.OCTOBER, 1, -Calendar.THURSDAY /*DOW>=DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1246.         // Rule Libya   1997    max -   Mar lastThu 2:00s   1:00    S
  1247.         // Rule Libya   1997    max -   Oct Thu>=1  2:00s   0   -
  1248.         // Africa/Tripoli   Libya(LY)   1:00    Libya   CE%sT
  1249.         //----------------------------------------------------------
  1250.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Monaco" /*CE%sT*/,
  1251.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1252.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1253.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1254.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1255.         // Europe/Monaco    Monaco(MC)  1:00    EU  CE%sT
  1256.         //----------------------------------------------------------
  1257.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Malta" /*CE%sT*/,
  1258.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1259.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1260.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1261.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1262.         // Europe/Malta Malta(MT)   1:00    EU  CE%sT
  1263.         //----------------------------------------------------------
  1264.         new SimpleTimeZone(1*ONE_HOUR, "Africa/Windhoek" /*WA%sT*/,
  1265.           Calendar.SEPTEMBER, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  1266.           Calendar.APRIL, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1267.         // Rule Namibia 1994    max -   Sep Sun>=1  2:00    1:00    S
  1268.         // Rule Namibia 1995    max -   Apr Sun>=1  2:00    0   -
  1269.         // Africa/Windhoek  Namibia(NA) 1:00    Namibia WA%sT
  1270.         //----------------------------------------------------------
  1271.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Amsterdam" /*CE%sT*/,
  1272.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1273.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1274.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1275.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1276.         // Europe/Amsterdam Netherlands(NL) 1:00    EU  CE%sT
  1277.         //----------------------------------------------------------
  1278.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Oslo" /*CE%sT*/,
  1279.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1280.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1281.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1282.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1283.         // Europe/Oslo  Norway(NO)  1:00    EU  CE%sT
  1284.         //----------------------------------------------------------
  1285.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Warsaw" /*CE%sT*/,
  1286.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 1*ONE_HOUR,
  1287.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1288.         // Rule W-Eur   1981    max -   Mar lastSun 1:00s   1:00    S
  1289.         // Rule W-Eur   1996    max -   Oct lastSun 1:00s   0   -
  1290.         // Europe/Warsaw    Poland(PL)  1:00    W-Eur   CE%sT
  1291.         //----------------------------------------------------------
  1292.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Stockholm" /*CE%sT*/,
  1293.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1294.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1295.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1296.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1297.         // Europe/Stockholm Sweden(SE)  1:00    EU  CE%sT
  1298.         //----------------------------------------------------------
  1299.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Belgrade" /*CE%sT*/,
  1300.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1301.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1302.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1303.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1304.         // Europe/Belgrade  Yugoslavia(YU)  1:00    EU  CE%sT
  1305.         //----------------------------------------------------------
  1306.         new SimpleTimeZone(1*ONE_HOUR, "Europe/Paris" /*CE%sT*/,
  1307.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1308.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1309.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1310.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1311.         // Europe/Paris France(FR)  1:00    EU  CE%sT
  1312.         new SimpleTimeZone(1*ONE_HOUR, "ECT" /*alias for Europe/Paris*/,
  1313.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1314.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR, 1*ONE_HOUR),
  1315.         //----------------------------------------------------------
  1316.         new SimpleTimeZone(2*ONE_HOUR, "Africa/Bujumbura" /*CAT*/),
  1317.         // Africa/Bujumbura Burundi(BI) 2:00    -   CAT
  1318.         //----------------------------------------------------------
  1319.         new SimpleTimeZone(2*ONE_HOUR, "Africa/Gaborone" /*CAT*/),
  1320.         // Africa/Gaborone  Botswana(BW)    2:00    -   CAT
  1321.         //----------------------------------------------------------
  1322.         new SimpleTimeZone(2*ONE_HOUR, "Africa/Lubumbashi" /*CAT*/),
  1323.         // Africa/Lubumbashi    Democratic Republic of Congo(CG)    2:00    -   CAT
  1324.         //----------------------------------------------------------
  1325.         new SimpleTimeZone(2*ONE_HOUR, "Africa/Maseru" /*SAST*/),
  1326.         // Africa/Maseru    Lesotho(LS) 2:00    -   SAST
  1327.         //----------------------------------------------------------
  1328.         new SimpleTimeZone(2*ONE_HOUR, "Africa/Blantyre" /*CAT*/),
  1329.         // Africa/Blantyre  Malawi(ML)  2:00    -   CAT
  1330.         //----------------------------------------------------------
  1331.         new SimpleTimeZone(2*ONE_HOUR, "Africa/Maputo" /*CAT*/),
  1332.         // Africa/Maputo    Mozambique(MZ)  2:00    -   CAT
  1333.         //----------------------------------------------------------
  1334.         new SimpleTimeZone(2*ONE_HOUR, "Africa/Kigali" /*CAT*/),
  1335.         // Africa/Kigali    Rwanda(RW)  2:00    -   CAT
  1336.         //----------------------------------------------------------
  1337.         new SimpleTimeZone(2*ONE_HOUR, "Africa/Khartoum" /*CA%sT*/),
  1338.         // Africa/Khartoum  Sudan(SD)   2:00    -   CA%sT
  1339.         //----------------------------------------------------------
  1340.         new SimpleTimeZone(2*ONE_HOUR, "Africa/Mbabane" /*SAST*/),
  1341.         // Africa/Mbabane   Swaziland(SZ)   2:00    -   SAST
  1342.         //----------------------------------------------------------
  1343.         new SimpleTimeZone(2*ONE_HOUR, "Africa/Lusaka" /*CAT*/),
  1344.         // Africa/Lusaka    Zambia(ZM)  2:00    -   CAT
  1345.         //----------------------------------------------------------
  1346.         new SimpleTimeZone(2*ONE_HOUR, "Africa/Harare" /*CAT*/),
  1347.         // Africa/Harare    Zimbabwe(ZW)    2:00    -   CAT
  1348.         new SimpleTimeZone(2*ONE_HOUR, "CAT" /*alias for Africa/Harare*/),
  1349.         //----------------------------------------------------------
  1350.         new SimpleTimeZone(2*ONE_HOUR, "Africa/Johannesburg" /*SAST*/),
  1351.         // Africa/Johannesburg  South Africa(ZA)    2:00    -   SAST
  1352.         //----------------------------------------------------------
  1353.         new SimpleTimeZone(2*ONE_HOUR, "Europe/Sofia" /*EE%sT*/,
  1354.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR,
  1355.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1356.         // Rule E-Eur   1981    max -   Mar lastSun 0:00    1:00    S
  1357.         // Rule E-Eur   1996    max -   Oct lastSun 0:00    0   -
  1358.         // Europe/Sofia Bulgaria(BG)    2:00    E-Eur   EE%sT
  1359.         //----------------------------------------------------------
  1360.         new SimpleTimeZone(2*ONE_HOUR, "Europe/Minsk" /*EE%sT*/,
  1361.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1362.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1363.         // Rule Russia  1993    max -   Mar lastSun 2:00s   1:00    S
  1364.         // Rule Russia  1996    max -   Oct lastSun 2:00s   0   -
  1365.         // Europe/Minsk Belarus(BY) 2:00    Russia  EE%sT
  1366.         //----------------------------------------------------------
  1367.         new SimpleTimeZone(2*ONE_HOUR, "Asia/Nicosia" /*EE%sT*/,
  1368.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR,
  1369.           Calendar.SEPTEMBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1370.         // Rule Cyprus  1979    max -   Sep lastSun 0:00    0   -
  1371.         // Rule Cyprus  1981    max -   Mar lastSun 0:00    1:00    S
  1372.         // Asia/Nicosia Cyprus(CY)  2:00    Cyprus  EE%sT
  1373.         //----------------------------------------------------------
  1374.         new SimpleTimeZone(2*ONE_HOUR, "Europe/Tallinn" /*EE%sT*/,
  1375.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1376.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1377.         // Rule C-Eur   1981    max -   Mar lastSun 2:00s   1:00    S
  1378.         // Rule C-Eur   1996    max -   Oct lastSun 2:00s   0   -
  1379.         // Europe/Tallinn   Estonia(EE) 2:00    C-Eur   EE%sT
  1380.         //----------------------------------------------------------
  1381.         new SimpleTimeZone(2*ONE_HOUR, "Africa/Cairo" /*EE%sT*/,
  1382.           Calendar.APRIL, -1, Calendar.FRIDAY /*DOW_IN_DOM*/, 1*ONE_HOUR,
  1383.           Calendar.SEPTEMBER, -1, Calendar.FRIDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1384.         // Rule Egypt   1995    max -   Apr lastFri 1:00    1:00    S
  1385.         // Rule Egypt   1995    max -   Sep lastFri 3:00    0   -
  1386.         // Africa/Cairo Egypt(EG)   2:00    Egypt   EE%sT
  1387.         new SimpleTimeZone(2*ONE_HOUR, "ART" /*alias for Africa/Cairo*/,
  1388.           Calendar.APRIL, -1, Calendar.FRIDAY /*DOW_IN_DOM*/, 1*ONE_HOUR,
  1389.           Calendar.SEPTEMBER, -1, Calendar.FRIDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1390.         //----------------------------------------------------------
  1391.         new SimpleTimeZone(2*ONE_HOUR, "Europe/Helsinki" /*EE%sT*/,
  1392.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR,
  1393.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1394.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1395.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1396.         // Europe/Helsinki  Finland(FI) 2:00    EU  EE%sT
  1397.         //----------------------------------------------------------
  1398.         new SimpleTimeZone(2*ONE_HOUR, "Europe/Athens" /*EE%sT*/,
  1399.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR,
  1400.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1401.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1402.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1403.         // Europe/Athens    Greece(GR)  2:00    EU  EE%sT
  1404.         //----------------------------------------------------------
  1405.         new SimpleTimeZone(2*ONE_HOUR, "Asia/Jerusalem" /*I%sT*/,
  1406.           Calendar.MARCH, 15, -Calendar.FRIDAY /*DOW>=DOM*/, 0*ONE_HOUR,
  1407.           Calendar.SEPTEMBER, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1408.         // Rule Zion    1999    max -   Mar Fri>=15 0:00    1:00    D
  1409.         // Rule Zion    1999    max -   Sep Sun>=1  0:00    0   S
  1410.         // Asia/Jerusalem   Israel(IL)  2:00    Zion    I%sT
  1411.         //----------------------------------------------------------
  1412.         new SimpleTimeZone(2*ONE_HOUR, "Asia/Amman" /*EE%sT*/,
  1413.           Calendar.APRIL, 1, -Calendar.FRIDAY /*DOW>=DOM*/, 0*ONE_HOUR,
  1414.           Calendar.SEPTEMBER, 15, -Calendar.FRIDAY /*DOW>=DOM*/, 1*ONE_HOUR, 1*ONE_HOUR),
  1415.         // Rule    Jordan   1993    max -   Apr Fri>=1  0:00    1:00    S
  1416.         // Rule    Jordan   1995    max -   Sep Fri>=15 0:00s   0   -
  1417.         // Asia/Amman   Jordan(JO)  2:00    Jordan  EE%sT
  1418.         //----------------------------------------------------------
  1419.         new SimpleTimeZone(2*ONE_HOUR, "Asia/Beirut" /*EE%sT*/,
  1420.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR,
  1421.           Calendar.SEPTEMBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1422.         // Rule Lebanon 1993    max -   Mar lastSun 0:00    1:00    S
  1423.         // Rule Lebanon 1993    max -   Sep lastSun 0:00    0   -
  1424.         // Asia/Beirut  Lebanon(LB) 2:00    Lebanon EE%sT
  1425.         //----------------------------------------------------------
  1426.         new SimpleTimeZone(2*ONE_HOUR, "Europe/Vilnius" /*EE%sT*/,
  1427.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1428.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1429.         // Rule C-Eur   1981    max -   Mar lastSun 2:00s   1:00    S
  1430.         // Rule C-Eur   1996    max -   Oct lastSun 2:00s   0   -
  1431.         // Europe/Vilnius   Lithuania(LT)   2:00    C-Eur   EE%sT
  1432.         //----------------------------------------------------------
  1433.         new SimpleTimeZone(2*ONE_HOUR, "Europe/Riga" /*EE%sT*/,
  1434.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1435.           Calendar.SEPTEMBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1436.         // Rule Latvia  1992    max -   Mar lastSun 2:00s   1:00    S
  1437.         // Rule Latvia  1992    max -   Sep lastSun 2:00s   0   -
  1438.         // Europe/Riga  Latvia(LV)  2:00    Latvia  EE%sT
  1439.         //----------------------------------------------------------
  1440.         new SimpleTimeZone(2*ONE_HOUR, "Europe/Chisinau" /*EE%sT*/,
  1441.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR,
  1442.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1443.         // Rule E-Eur   1981    max -   Mar lastSun 0:00    1:00    S
  1444.         // Rule E-Eur   1996    max -   Oct lastSun 0:00    0   -
  1445.         // Europe/Chisinau  Moldova(MD) 2:00    E-Eur   EE%sT
  1446.         //----------------------------------------------------------
  1447.         new SimpleTimeZone(2*ONE_HOUR, "Europe/Bucharest" /*EE%sT*/,
  1448.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR,
  1449.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1450.         // Rule E-Eur   1981    max -   Mar lastSun 0:00    1:00    S
  1451.         // Rule E-Eur   1996    max -   Oct lastSun 0:00    0   -
  1452.         // Europe/Bucharest Romania(RO) 2:00    E-Eur   EE%sT
  1453.         //----------------------------------------------------------
  1454.         new SimpleTimeZone(2*ONE_HOUR, "Europe/Kaliningrad" /*EE%sT*/,
  1455.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1456.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1457.         // Rule Russia  1993    max -   Mar lastSun 2:00s   1:00    S
  1458.         // Rule Russia  1996    max -   Oct lastSun 2:00s   0   -
  1459.         // Europe/Kaliningrad   Russia(RU)  2:00    Russia  EE%sT
  1460.         //----------------------------------------------------------
  1461.         new SimpleTimeZone(2*ONE_HOUR, "Asia/Damascus" /*EE%sT*/,
  1462.           Calendar.APRIL, 1, 0 /*DOM*/, 0*ONE_HOUR,
  1463.           Calendar.OCTOBER, 1, 0 /*DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1464.         // Rule Syria   1994    max -   Apr 1   0:00    1:00    S
  1465.         // Rule Syria   1994    max -   Oct 1   0:00    0   -
  1466.         // Asia/Damascus    Syria(SY)   2:00    Syria   EE%sT
  1467.         //----------------------------------------------------------
  1468.         new SimpleTimeZone(2*ONE_HOUR, "Europe/Kiev" /*EE%sT*/,
  1469.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR,
  1470.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1471.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1472.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1473.         // Europe/Kiev  Ukraine(UA) 2:00    EU  EE%sT
  1474.         //----------------------------------------------------------
  1475.         new SimpleTimeZone(2*ONE_HOUR, "Europe/Istanbul" /*EE%sT*/,
  1476.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR,
  1477.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1478.         // Rule EU  1981    max -   Mar lastSun 1:00u   1:00    S
  1479.         // Rule EU  1996    max -   Oct lastSun 1:00u   0   -
  1480.         // Europe/Istanbul  Turkey(TR)  2:00    EU  EE%sT
  1481.         new SimpleTimeZone(2*ONE_HOUR, "EET" /*alias for Europe/Istanbul*/,
  1482.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR,
  1483.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1484.         //----------------------------------------------------------
  1485.         new SimpleTimeZone(3*ONE_HOUR, "Asia/Bahrain" /*AST*/),
  1486.         // Asia/Bahrain Bahrain(BH) 3:00    -   AST
  1487.         //----------------------------------------------------------
  1488.         new SimpleTimeZone(3*ONE_HOUR, "Africa/Djibouti" /*EAT*/),
  1489.         // Africa/Djibouti  Djibouti(DJ)    3:00    -   EAT
  1490.         //----------------------------------------------------------
  1491.         new SimpleTimeZone(3*ONE_HOUR, "Africa/Asmera" /*EAT*/),
  1492.         // Africa/Asmera    Eritrea(ER) 3:00    -   EAT
  1493.         //----------------------------------------------------------
  1494.         new SimpleTimeZone(3*ONE_HOUR, "Africa/Addis_Ababa" /*EAT*/),
  1495.         // Africa/Addis_Ababa   Ethiopia(ET)    3:00    -   EAT
  1496.         new SimpleTimeZone(3*ONE_HOUR, "EAT" /*alias for Africa/Addis_Ababa*/),
  1497.         //----------------------------------------------------------
  1498.         new SimpleTimeZone(3*ONE_HOUR, "Africa/Nairobi" /*EAT*/),
  1499.         // Africa/Nairobi   Kenya(KE)   3:00    -   EAT
  1500.         //----------------------------------------------------------
  1501.         new SimpleTimeZone(3*ONE_HOUR, "Indian/Comoro" /*EAT*/),
  1502.         // Indian/Comoro    Comoros(KM) 3:00    -   EAT
  1503.         //----------------------------------------------------------
  1504.         new SimpleTimeZone(3*ONE_HOUR, "Asia/Kuwait" /*AST*/),
  1505.         // Asia/Kuwait  Kuwait(KW)  3:00    -   AST
  1506.         //----------------------------------------------------------
  1507.         new SimpleTimeZone(3*ONE_HOUR, "Indian/Antananarivo" /*EAT*/),
  1508.         // Indian/Antananarivo  Madagascar(MK)  3:00    -   EAT
  1509.         //----------------------------------------------------------
  1510.         new SimpleTimeZone(3*ONE_HOUR, "Asia/Qatar" /*AST*/),
  1511.         // Asia/Qatar   Qatar(QA)   3:00    -   AST
  1512.         //----------------------------------------------------------
  1513.         new SimpleTimeZone(3*ONE_HOUR, "Africa/Mogadishu" /*EAT*/),
  1514.         // Africa/Mogadishu Somalia(SO) 3:00    -   EAT
  1515.         //----------------------------------------------------------
  1516.         new SimpleTimeZone(3*ONE_HOUR, "Africa/Dar_es_Salaam" /*EAT*/),
  1517.         // Africa/Dar_es_Salaam Tanzania(TZ)    3:00    -   EAT
  1518.         //----------------------------------------------------------
  1519.         new SimpleTimeZone(3*ONE_HOUR, "Africa/Kampala" /*EAT*/),
  1520.         // Africa/Kampala   Uganda(UG)  3:00    -   EAT
  1521.         //----------------------------------------------------------
  1522.         new SimpleTimeZone(3*ONE_HOUR, "Asia/Aden" /*AST*/),
  1523.         // Asia/Aden    Yemen(YE)   3:00    -   AST
  1524.         //----------------------------------------------------------
  1525.         new SimpleTimeZone(3*ONE_HOUR, "Indian/Mayotte" /*EAT*/),
  1526.         // Indian/Mayotte   Mayotte(YT) 3:00    -   EAT
  1527.         //----------------------------------------------------------
  1528.         new SimpleTimeZone(3*ONE_HOUR, "Asia/Riyadh" /*AST*/),
  1529.         // Asia/Riyadh  Saudi Arabia(SA)    3:00    -   AST
  1530.         //----------------------------------------------------------
  1531.         new SimpleTimeZone(3*ONE_HOUR, "Asia/Baghdad" /*A%sT*/,
  1532.           Calendar.APRIL, 1, 0 /*DOM*/, 3*ONE_HOUR,
  1533.           Calendar.OCTOBER, 1, 0 /*DOM*/, 4*ONE_HOUR, 1*ONE_HOUR),
  1534.         // Rule Iraq    1991    max -   Apr 1   3:00s   1:00    D
  1535.         // Rule Iraq    1991    max -   Oct 1   3:00s   0   D
  1536.         // Asia/Baghdad Iraq(IQ)    3:00    Iraq    A%sT
  1537.         //----------------------------------------------------------
  1538.         new SimpleTimeZone(3*ONE_HOUR, "Europe/Simferopol" /*MSK/MSD*/,
  1539.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR,
  1540.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1541.         // Rule Crimea  1996    max -   Mar lastSun 0:00u   1:00    -
  1542.         // Rule Crimea  1996    max -   Oct lastSun 0:00u   0   -
  1543.         // Europe/Simferopol    Ukraine(UA) 3:00    Crimea  MSK/MSD
  1544.         //----------------------------------------------------------
  1545.         new SimpleTimeZone(3*ONE_HOUR, "Europe/Moscow" /*MSK/MSD*/,
  1546.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1547.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1548.         // Rule Russia  1993    max -   Mar lastSun 2:00s   1:00    S
  1549.         // Rule Russia  1996    max -   Oct lastSun 2:00s   0   -
  1550.         // Europe/Moscow    Russia(RU)  3:00    Russia  MSK/MSD
  1551.         //----------------------------------------------------------
  1552.         new SimpleTimeZone((int)(3.5*ONE_HOUR), "Asia/Tehran" /*IR%sT*/,
  1553.           Calendar.MARCH, 21, 0 /*DOM*/, 0*ONE_HOUR,
  1554.           Calendar.SEPTEMBER, 23, 0 /*DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1555.         // Rule Iran    1997    1999    -   Mar 21  0:00    1:00    S
  1556.         // Rule Iran    1997    1999    -   Sep 23  0:00    0   -
  1557.         // Asia/Tehran  Iran(IR)    3:30    Iran    IR%sT
  1558.         new SimpleTimeZone((int)(3.5*ONE_HOUR), "MET" /*alias for Asia/Tehran*/,
  1559.           Calendar.MARCH, 21, 0 /*DOM*/, 0*ONE_HOUR,
  1560.           Calendar.SEPTEMBER, 23, 0 /*DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1561.         //----------------------------------------------------------
  1562.         new SimpleTimeZone(4*ONE_HOUR, "Asia/Dubai" /*GST*/),
  1563.         // Asia/Dubai   United Arab Emirates(AE)    4:00    -   GST
  1564.         //----------------------------------------------------------
  1565.         new SimpleTimeZone(4*ONE_HOUR, "Indian/Mauritius" /*MUT*/),
  1566.         // Indian/Mauritius Mauritius(MU)   4:00    -   MUT # Mauritius Time
  1567.         //----------------------------------------------------------
  1568.         new SimpleTimeZone(4*ONE_HOUR, "Asia/Muscat" /*GST*/),
  1569.         // Asia/Muscat  Oman(OM)    4:00    -   GST
  1570.         //----------------------------------------------------------
  1571.         new SimpleTimeZone(4*ONE_HOUR, "Indian/Reunion" /*RET*/),
  1572.         // Indian/Reunion   Reunion(RE) 4:00    -   RET # Reunion Time
  1573.         //----------------------------------------------------------
  1574.         new SimpleTimeZone(4*ONE_HOUR, "Indian/Mahe" /*SCT*/),
  1575.         // Indian/Mahe  Seychelles(SC)  4:00    -   SCT # Seychelles Time
  1576.         //----------------------------------------------------------
  1577.         new SimpleTimeZone(4*ONE_HOUR, "Asia/Yerevan" /*AM%sT*/),
  1578.         // Asia/Yerevan Armenia(AM) 4:00    -   AM%sT
  1579.         new SimpleTimeZone(4*ONE_HOUR, "NET" /*alias for Asia/Yerevan*/),
  1580.         //----------------------------------------------------------
  1581.         new SimpleTimeZone(4*ONE_HOUR, "Asia/Baku" /*AZ%sT*/,
  1582.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 5*ONE_HOUR,
  1583.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 5*ONE_HOUR, 1*ONE_HOUR),
  1584.         // Rule EUAsia  1981    max -   Mar lastSun 1:00u   1:00    S
  1585.         // Rule EUAsia  1996    max -   Oct lastSun 1:00u   0   -
  1586.         // Asia/Baku    Azerbaijan(AZ)  4:00    EUAsia  AZ%sT
  1587.         //----------------------------------------------------------
  1588.         new SimpleTimeZone(4*ONE_HOUR, "Asia/Aqtau" /*AQT%sT*/,
  1589.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR,
  1590.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1591.         // Rule E-EurAsia   1981    max -   Mar lastSun 0:00    1:00    S
  1592.         // Rule E-EurAsia   1996    max -   Oct lastSun 0:00    0   -
  1593.         // Asia/Aqtau   Kazakhstan(KZ)  4:00    E-EurAsia   AQT%sT
  1594.         //----------------------------------------------------------
  1595.         new SimpleTimeZone(4*ONE_HOUR, "Europe/Samara" /*SAM%sT*/,
  1596.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1597.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1598.         // Rule Russia  1993    max -   Mar lastSun 2:00s   1:00    S
  1599.         // Rule Russia  1996    max -   Oct lastSun 2:00s   0   -
  1600.         // Europe/Samara    Russia(RU)  4:00    Russia  SAM%sT
  1601.         //----------------------------------------------------------
  1602.         new SimpleTimeZone((int)(4.5*ONE_HOUR), "Asia/Kabul" /*AFT*/),
  1603.         // Asia/Kabul   Afghanistan(AF) 4:30    -   AFT
  1604.         //----------------------------------------------------------
  1605.         new SimpleTimeZone(5*ONE_HOUR, "Indian/Kerguelen" /*TFT*/),
  1606.         // Indian/Kerguelen France - year-round bases(FR)   5:00    -   TFT # ISO code TF Time
  1607.         //----------------------------------------------------------
  1608.         new SimpleTimeZone(5*ONE_HOUR, "Asia/Tbilisi" /*GET*/),
  1609.         // Asia/Tbilisi Georgia(GE) 5:00    -   GET
  1610.         //----------------------------------------------------------
  1611.         new SimpleTimeZone(5*ONE_HOUR, "Indian/Chagos" /*IOT*/),
  1612.         // Indian/Chagos    British Indian Ocean Territory(IO)  5:00    -   IOT # BIOT Time
  1613.         //----------------------------------------------------------
  1614.         new SimpleTimeZone(5*ONE_HOUR, "Indian/Maldives" /*MVT*/),
  1615.         // Indian/Maldives  Maldives(MV)    5:00    -   MVT # Maldives Time
  1616.         //----------------------------------------------------------
  1617.         new SimpleTimeZone(5*ONE_HOUR, "Asia/Dushanbe" /*TJT*/),
  1618.         // Asia/Dushanbe    Tajikistan(TJ)  5:00    -   TJT # Tajikistan Time
  1619.         //----------------------------------------------------------
  1620.         new SimpleTimeZone(5*ONE_HOUR, "Asia/Ashkhabad" /*TMT*/),
  1621.         // Asia/Ashkhabad   Turkmenistan(TM)    5:00    -   TMT # Turkmenistan Time
  1622.         //----------------------------------------------------------
  1623.         new SimpleTimeZone(5*ONE_HOUR, "Asia/Tashkent" /*UZT*/),
  1624.         // Asia/Tashkent    Uzbekistan(UZ)  5:00    -   UZT # Uzbekistan Time
  1625.         //----------------------------------------------------------
  1626.         new SimpleTimeZone(5*ONE_HOUR, "Asia/Karachi" /*PKT*/),
  1627.         // Asia/Karachi Pakistan(PK)    5:00    -   PKT # Pakistan Time
  1628.         new SimpleTimeZone(5*ONE_HOUR, "PLT" /*alias for Asia/Karachi*/),
  1629.         //----------------------------------------------------------
  1630.         new SimpleTimeZone(5*ONE_HOUR, "Asia/Bishkek" /*KG%sT*/,
  1631.           Calendar.APRIL, 7, -Calendar.SUNDAY /*DOW>=DOM*/, 0*ONE_HOUR,
  1632.           Calendar.SEPTEMBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1633.         // Rule Kirgiz  1992    max -   Apr Sun>=7  0:00    1:00    S
  1634.         // Rule Kirgiz  1991    max -   Sep lastSun 0:00    0   -
  1635.         // Asia/Bishkek Kirgizstan(KG)  5:00    Kirgiz  KG%sT   # Kirgizstan Time
  1636.         //----------------------------------------------------------
  1637.         new SimpleTimeZone(5*ONE_HOUR, "Asia/Aqtobe" /*AQT%sT*/,
  1638.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR,
  1639.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1640.         // Rule E-EurAsia   1981    max -   Mar lastSun 0:00    1:00    S
  1641.         // Rule E-EurAsia   1996    max -   Oct lastSun 0:00    0   -
  1642.         // Asia/Aqtobe  Kazakhstan(KZ)  5:00    E-EurAsia   AQT%sT
  1643.         //----------------------------------------------------------
  1644.         new SimpleTimeZone(5*ONE_HOUR, "Asia/Yekaterinburg" /*YEK%sT*/,
  1645.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1646.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1647.         // Rule Russia  1993    max -   Mar lastSun 2:00s   1:00    S
  1648.         // Rule Russia  1996    max -   Oct lastSun 2:00s   0   -
  1649.         // Asia/Yekaterinburg   Russia(RU)  5:00    Russia  YEK%sT  # Yekaterinburg Time
  1650.         //----------------------------------------------------------
  1651.         new SimpleTimeZone((int)(5.5*ONE_HOUR), "Asia/Calcutta" /*IST*/),
  1652.         // Asia/Calcutta    India(IN)   5:30    -   IST
  1653.         new SimpleTimeZone((int)(5.5*ONE_HOUR), "IST" /*alias for Asia/Calcutta*/),
  1654.         //----------------------------------------------------------
  1655.         new SimpleTimeZone((int)(5.75*ONE_HOUR), "Asia/Katmandu" /*NPT*/),
  1656.         // Asia/Katmandu    Nepal(NP)   5:45    -   NPT # Nepal Time
  1657.         //----------------------------------------------------------
  1658.         new SimpleTimeZone(6*ONE_HOUR, "Antarctica/Mawson" /*MAWT*/),
  1659.         // Antarctica/Mawson    Australia - territories(AQ) 6:00    -   MAWT    # Mawson Time
  1660.         //----------------------------------------------------------
  1661.         new SimpleTimeZone(6*ONE_HOUR, "Asia/Thimbu" /*BTT*/),
  1662.         // Asia/Thimbu  Bhutan(BT)  6:00    -   BTT # Bhutan Time
  1663.         //----------------------------------------------------------
  1664.         new SimpleTimeZone(6*ONE_HOUR, "Asia/Colombo" /*LKT*/),
  1665.         // Asia/Colombo Sri Lanka(LK)   6:00    -   LKT
  1666.         //----------------------------------------------------------
  1667.         new SimpleTimeZone(6*ONE_HOUR, "Asia/Dacca" /*BDT*/),
  1668.         // Asia/Dacca   Bangladesh(BD)  6:00    -   BDT # Bangladesh Time
  1669.         new SimpleTimeZone(6*ONE_HOUR, "BST" /*alias for Asia/Dacca*/),
  1670.         //----------------------------------------------------------
  1671.         new SimpleTimeZone(6*ONE_HOUR, "Asia/Alma-Ata" /*ALM%sT*/,
  1672.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR,
  1673.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1674.         // Rule E-EurAsia   1981    max -   Mar lastSun 0:00    1:00    S
  1675.         // Rule E-EurAsia   1996    max -   Oct lastSun 0:00    0   -
  1676.         // Asia/Alma-Ata    Kazakhstan(KZ)  6:00    E-EurAsia   ALM%sT
  1677.         //----------------------------------------------------------
  1678.         new SimpleTimeZone(6*ONE_HOUR, "Asia/Novosibirsk" /*NOV%sT*/,
  1679.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1680.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1681.         // Rule Russia  1993    max -   Mar lastSun 2:00s   1:00    S
  1682.         // Rule Russia  1996    max -   Oct lastSun 2:00s   0   -
  1683.         // Asia/Novosibirsk Russia(RU)  6:00    Russia  NOV%sT
  1684.         //----------------------------------------------------------
  1685.         new SimpleTimeZone((int)(6.5*ONE_HOUR), "Indian/Cocos" /*CCT*/),
  1686.         // Indian/Cocos Cocos(CC)   6:30    -   CCT # Cocos Islands Time
  1687.         //----------------------------------------------------------
  1688.         new SimpleTimeZone((int)(6.5*ONE_HOUR), "Asia/Rangoon" /*MMT*/),
  1689.         // Asia/Rangoon Burma / Myanmar(MM) 6:30    -   MMT # Myanmar Time
  1690.         //----------------------------------------------------------
  1691.         new SimpleTimeZone(7*ONE_HOUR, "Indian/Christmas" /*CXT*/),
  1692.         // Indian/Christmas Australian miscellany(AU)   7:00    -   CXT # Christmas Island Time
  1693.         //----------------------------------------------------------
  1694.         new SimpleTimeZone(7*ONE_HOUR, "Asia/Jakarta" /*JAVT*/),
  1695.         // Asia/Jakarta Indonesia(ID)   7:00    -   JAVT
  1696.         //----------------------------------------------------------
  1697.         new SimpleTimeZone(7*ONE_HOUR, "Asia/Phnom_Penh" /*ICT*/),
  1698.         // Asia/Phnom_Penh  Cambodia(KH)    7:00    -   ICT
  1699.         //----------------------------------------------------------
  1700.         new SimpleTimeZone(7*ONE_HOUR, "Asia/Vientiane" /*ICT*/),
  1701.         // Asia/Vientiane   Laos(LA)    7:00    -   ICT
  1702.         //----------------------------------------------------------
  1703.         new SimpleTimeZone(7*ONE_HOUR, "Asia/Saigon" /*ICT*/),
  1704.         // Asia/Saigon  Vietnam(VN) 7:00    -   ICT
  1705.         new SimpleTimeZone(7*ONE_HOUR, "VST" /*alias for Asia/Saigon*/),
  1706.         //----------------------------------------------------------
  1707.         new SimpleTimeZone(7*ONE_HOUR, "Asia/Bangkok" /*ICT*/),
  1708.         // Asia/Bangkok Thailand(TH)    7:00    -   ICT
  1709.         //----------------------------------------------------------
  1710.         new SimpleTimeZone(7*ONE_HOUR, "Asia/Krasnoyarsk" /*KRA%sT*/,
  1711.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1712.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1713.         // Rule Russia  1993    max -   Mar lastSun 2:00s   1:00    S
  1714.         // Rule Russia  1996    max -   Oct lastSun 2:00s   0   -
  1715.         // Asia/Krasnoyarsk Russia(RU)  7:00    Russia  KRA%sT
  1716.         //----------------------------------------------------------
  1717.         new SimpleTimeZone(8*ONE_HOUR, "Antarctica/Casey" /*WST*/),
  1718.         // Antarctica/Casey Australia - territories(AQ) 8:00    -   WST # Western (Aus) Standard Time
  1719.         //----------------------------------------------------------
  1720.         new SimpleTimeZone(8*ONE_HOUR, "Australia/Perth" /*WST*/),
  1721.         // Australia/Perth  Australia(AU)   8:00    -   WST
  1722.         //----------------------------------------------------------
  1723.         new SimpleTimeZone(8*ONE_HOUR, "Asia/Brunei" /*BNT*/),
  1724.         // Asia/Brunei  Brunei(BN)  8:00    -   BNT
  1725.         //----------------------------------------------------------
  1726.         new SimpleTimeZone(8*ONE_HOUR, "Asia/Hong_Kong" /*C%sT*/),
  1727.         // Asia/Hong_Kong   China(HK)   8:00    -   C%sT
  1728.         //----------------------------------------------------------
  1729.         new SimpleTimeZone(8*ONE_HOUR, "Asia/Ujung_Pandang" /*BORT*/),
  1730.         // Asia/Ujung_Pandang   Indonesia(ID)   8:00    -   BORT
  1731.         //----------------------------------------------------------
  1732.         new SimpleTimeZone(8*ONE_HOUR, "Asia/Ishigaki" /*CST*/),
  1733.         // Asia/Ishigaki    Japan(JP)   8:00    -   CST
  1734.         //----------------------------------------------------------
  1735.         new SimpleTimeZone(8*ONE_HOUR, "Asia/Macao" /*C%sT*/),
  1736.         // Asia/Macao   Macao(MO)   8:00    -   C%sT
  1737.         //----------------------------------------------------------
  1738.         new SimpleTimeZone(8*ONE_HOUR, "Asia/Kuala_Lumpur" /*MYT*/),
  1739.         // Asia/Kuala_Lumpur    Malaysia(MY)    8:00    -   MYT # Malaysia Time
  1740.         //----------------------------------------------------------
  1741.         new SimpleTimeZone(8*ONE_HOUR, "Asia/Manila" /*PH%sT*/),
  1742.         // Asia/Manila  Philippines(PH) 8:00    -   PH%sT
  1743.         //----------------------------------------------------------
  1744.         new SimpleTimeZone(8*ONE_HOUR, "Asia/Singapore" /*SGT*/),
  1745.         // Asia/Singapore   Singapore(SG)   8:00    -   SGT
  1746.         //----------------------------------------------------------
  1747.         new SimpleTimeZone(8*ONE_HOUR, "Asia/Taipei" /*C%sT*/),
  1748.         // Asia/Taipei  Taiwan(TW)  8:00    -   C%sT
  1749.         //----------------------------------------------------------
  1750.         new SimpleTimeZone(8*ONE_HOUR, "Asia/Shanghai" /*C%sT*/),
  1751.         // Asia/Shanghai    China(CN)   8:00    -   C%sT
  1752.         new SimpleTimeZone(8*ONE_HOUR, "CTT" /*alias for Asia/Shanghai*/),
  1753.         //----------------------------------------------------------
  1754.         new SimpleTimeZone(8*ONE_HOUR, "Asia/Ulan_Bator" /*ULA%sT*/,
  1755.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR,
  1756.           Calendar.SEPTEMBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 0*ONE_HOUR, 1*ONE_HOUR),
  1757.         // Rule Mongol  1991    max -   Mar lastSun 0:00    1:00    S
  1758.         // Rule Mongol  1997    max -   Sep lastSun 0:00    0   -
  1759.         // Asia/Ulan_Bator  Mongolia(MN)    8:00    Mongol  ULA%sT
  1760.         //----------------------------------------------------------
  1761.         new SimpleTimeZone(8*ONE_HOUR, "Asia/Irkutsk" /*IRK%sT*/,
  1762.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1763.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1764.         // Rule Russia  1993    max -   Mar lastSun 2:00s   1:00    S
  1765.         // Rule Russia  1996    max -   Oct lastSun 2:00s   0   -
  1766.         // Asia/Irkutsk Russia(RU)  8:00    Russia  IRK%sT
  1767.         //----------------------------------------------------------
  1768.         new SimpleTimeZone(9*ONE_HOUR, "Asia/Jayapura" /*JAYT*/),
  1769.         // Asia/Jayapura    Indonesia(ID)   9:00    -   JAYT
  1770.         //----------------------------------------------------------
  1771.         new SimpleTimeZone(9*ONE_HOUR, "Asia/Pyongyang" /*KST*/),
  1772.         // Asia/Pyongyang   ?(KP)   9:00    -   KST
  1773.         //----------------------------------------------------------
  1774.         new SimpleTimeZone(9*ONE_HOUR, "Asia/Seoul" /*K%sT*/),
  1775.         // Asia/Seoul   ?(KR)   9:00    -   K%sT
  1776.         //----------------------------------------------------------
  1777.         new SimpleTimeZone(9*ONE_HOUR, "Pacific/Palau" /*PWT*/),
  1778.         // Pacific/Palau    Palau(PW)   9:00    -   PWT # Palau Time
  1779.         //----------------------------------------------------------
  1780.         new SimpleTimeZone(9*ONE_HOUR, "Asia/Tokyo" /*JST*/),
  1781.         // Asia/Tokyo   Japan(JP)   9:00    -   JST
  1782.         new SimpleTimeZone(9*ONE_HOUR, "JST" /*alias for Asia/Tokyo*/),
  1783.         //----------------------------------------------------------
  1784.         new SimpleTimeZone(9*ONE_HOUR, "Asia/Yakutsk" /*YAK%sT*/,
  1785.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1786.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1787.         // Rule Russia  1993    max -   Mar lastSun 2:00s   1:00    S
  1788.         // Rule Russia  1996    max -   Oct lastSun 2:00s   0   -
  1789.         // Asia/Yakutsk Russia(RU)  9:00    Russia  YAK%sT
  1790.         //----------------------------------------------------------
  1791.         new SimpleTimeZone((int)(9.5*ONE_HOUR), "Australia/Darwin" /*CST*/),
  1792.         // Australia/Darwin Australia(AU)   9:30    -   CST
  1793.         new SimpleTimeZone((int)(9.5*ONE_HOUR), "ACT" /*alias for Australia/Darwin*/),
  1794.         //----------------------------------------------------------
  1795.         new SimpleTimeZone((int)(9.5*ONE_HOUR), "Australia/Adelaide" /*CST*/,
  1796.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1797.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1798.         // Rule AS  1987    max -   Oct lastSun 2:00s   1:00    -
  1799.         // Rule AS  1995    max -   Mar lastSun 2:00s   0   -
  1800.         // Australia/Adelaide   South Australia(AU) 9:30    AS  CST
  1801.         //----------------------------------------------------------
  1802.         new SimpleTimeZone(10*ONE_HOUR, "Antarctica/DumontDUrville" /*DDUT*/),
  1803.         // Antarctica/DumontDUrville    France - year-round bases(AQ)   10:00   -   DDUT    # Dumont-d'Urville Time
  1804.         //----------------------------------------------------------
  1805.         new SimpleTimeZone(10*ONE_HOUR, "Pacific/Truk" /*TRUT*/),
  1806.         // Pacific/Truk Micronesia(FM)  10:00   -   TRUT    # Truk Time
  1807.         //----------------------------------------------------------
  1808.         new SimpleTimeZone(10*ONE_HOUR, "Pacific/Guam" /*GST*/),
  1809.         // Pacific/Guam Guam(GU)    10:00   -   GST
  1810.         //----------------------------------------------------------
  1811.         new SimpleTimeZone(10*ONE_HOUR, "Pacific/Saipan" /*MPT*/),
  1812.         // Pacific/Saipan   N Mariana Is(MP)    10:00   -   MPT
  1813.         //----------------------------------------------------------
  1814.         new SimpleTimeZone(10*ONE_HOUR, "Pacific/Port_Moresby" /*PGT*/),
  1815.         // Pacific/Port_Moresby Papua New Guinea(PG)    10:00   -   PGT # Papua New Guinea Time
  1816.         //----------------------------------------------------------
  1817.         new SimpleTimeZone(10*ONE_HOUR, "Australia/Brisbane" /*EST*/),
  1818.         // Australia/Brisbane   Australia(AU)   10:00   -   EST
  1819.         //----------------------------------------------------------
  1820.         new SimpleTimeZone(10*ONE_HOUR, "Asia/Vladivostok" /*VLA%sT*/,
  1821.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1822.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1823.         // Rule Russia  1993    max -   Mar lastSun 2:00s   1:00    S
  1824.         // Rule Russia  1996    max -   Oct lastSun 2:00s   0   -
  1825.         // Asia/Vladivostok Russia(RU)  10:00   Russia  VLA%sT
  1826.         //----------------------------------------------------------
  1827.         new SimpleTimeZone(10*ONE_HOUR, "Australia/Sydney" /*EST*/,
  1828.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1829.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1830.         // Rule AN  1987    max -   Oct lastSun 2:00s   1:00    -
  1831.         // Rule AN  1996    max -   Mar lastSun 2:00s   0   -
  1832.         // Australia/Sydney New South Wales(AU) 10:00   AN  EST
  1833.         new SimpleTimeZone(10*ONE_HOUR, "AET" /*alias for Australia/Sydney*/,
  1834.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1835.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1836.         //----------------------------------------------------------
  1837.         new SimpleTimeZone((int)(10.5*ONE_HOUR), "Australia/Lord_Howe" /*LHST*/,
  1838.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1839.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, (int)(0.5*ONE_HOUR)),
  1840.         // Rule LH  1987    max -   Oct lastSun 2:00s   0:30    -
  1841.         // Rule LH  1996    max -   Mar lastSun 2:00s   0   -
  1842.         // Australia/Lord_Howe  Lord Howe Island(AU)    10:30   LH  LHST
  1843.         //----------------------------------------------------------
  1844.         new SimpleTimeZone(11*ONE_HOUR, "Pacific/Ponape" /*PONT*/),
  1845.         // Pacific/Ponape   Micronesia(FM)  11:00   -   PONT    # Ponape Time
  1846.         //----------------------------------------------------------
  1847.         new SimpleTimeZone(11*ONE_HOUR, "Pacific/Efate" /*VU%sT*/),
  1848.         // Pacific/Efate    Vanuatu(VU) 11:00   -   VU%sT   # Vanuatu Time
  1849.         //----------------------------------------------------------
  1850.         new SimpleTimeZone(11*ONE_HOUR, "Pacific/Guadalcanal" /*SBT*/),
  1851.         // Pacific/Guadalcanal  Solomon Is(SB)  11:00   -   SBT # Solomon Is Time
  1852.         new SimpleTimeZone(11*ONE_HOUR, "SST" /*alias for Pacific/Guadalcanal*/),
  1853.         //----------------------------------------------------------
  1854.         new SimpleTimeZone(11*ONE_HOUR, "Pacific/Noumea" /*NC%sT*/,
  1855.           Calendar.NOVEMBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1856.           Calendar.MARCH, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1857.         // Rule NC  1997    max -   Mar Sun>=1  2:00s   0   -
  1858.         // Rule NC  1997    max -   Nov lastSun 2:00s   1:00    S
  1859.         // Pacific/Noumea   New Caledonia(NC)   11:00   NC  NC%sT
  1860.         //----------------------------------------------------------
  1861.         new SimpleTimeZone(11*ONE_HOUR, "Asia/Magadan" /*MAG%sT*/,
  1862.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1863.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1864.         // Rule Russia  1993    max -   Mar lastSun 2:00s   1:00    S
  1865.         // Rule Russia  1996    max -   Oct lastSun 2:00s   0   -
  1866.         // Asia/Magadan Russia(RU)  11:00   Russia  MAG%sT
  1867.         //----------------------------------------------------------
  1868.         new SimpleTimeZone((int)(11.5*ONE_HOUR), "Pacific/Norfolk" /*NFT*/),
  1869.         // Pacific/Norfolk  Norfolk(NF) 11:30   -   NFT # Norfolk Time
  1870.         //----------------------------------------------------------
  1871.         new SimpleTimeZone(12*ONE_HOUR, "Pacific/Kosrae" /*KOST*/),
  1872.         // Pacific/Kosrae   Micronesia(FM)  12:00   -   KOST    # Kosrae Time
  1873.         //----------------------------------------------------------
  1874.         new SimpleTimeZone(12*ONE_HOUR, "Pacific/Tarawa" /*GILT*/),
  1875.         // Pacific/Tarawa   Kiribati(KI)    12:00   -   GILT    # Gilbert Is Time
  1876.         //----------------------------------------------------------
  1877.         new SimpleTimeZone(12*ONE_HOUR, "Pacific/Majuro" /*MHT*/),
  1878.         // Pacific/Majuro   Marshall Is(MH) 12:00   -   MHT
  1879.         //----------------------------------------------------------
  1880.         new SimpleTimeZone(12*ONE_HOUR, "Pacific/Nauru" /*NRT*/),
  1881.         // Pacific/Nauru    Nauru(NR)   12:00   -   NRT
  1882.         //----------------------------------------------------------
  1883.         new SimpleTimeZone(12*ONE_HOUR, "Pacific/Funafuti" /*TVT*/),
  1884.         // Pacific/Funafuti Tuvalu(TV)  12:00   -   TVT # Tuvalu Time
  1885.         //----------------------------------------------------------
  1886.         new SimpleTimeZone(12*ONE_HOUR, "Pacific/Wake" /*WAKT*/),
  1887.         // Pacific/Wake Wake(US)    12:00   -   WAKT    # Wake Time
  1888.         //----------------------------------------------------------
  1889.         new SimpleTimeZone(12*ONE_HOUR, "Pacific/Wallis" /*WFT*/),
  1890.         // Pacific/Wallis   Wallis and Futuna(WF)   12:00   -   WFT # Wallis & Futuna Time
  1891.         //----------------------------------------------------------
  1892.         new SimpleTimeZone(12*ONE_HOUR, "Pacific/Fiji" /*FJT*/),
  1893.         // Pacific/Fiji Fiji(FJ)    12:00   -   FJT # Fiji Time
  1894.         //----------------------------------------------------------
  1895.         new SimpleTimeZone(12*ONE_HOUR, "Antarctica/McMurdo" /*NZ%sT*/,
  1896.           Calendar.OCTOBER, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  1897.           Calendar.MARCH, 15, -Calendar.SUNDAY /*DOW>=DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1898.         // Rule NZAQ    1990    max -   Oct Sun>=1  2:00s   1:00    D
  1899.         // Rule NZAQ    1990    max -   Mar Sun>=15 2:00s   0   S
  1900.         // Antarctica/McMurdo   USA - year-round bases(AQ)  12:00   NZAQ    NZ%sT
  1901.         //----------------------------------------------------------
  1902.         new SimpleTimeZone(12*ONE_HOUR, "Asia/Kamchatka" /*PET%sT*/,
  1903.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1904.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1905.         // Rule Russia  1993    max -   Mar lastSun 2:00s   1:00    S
  1906.         // Rule Russia  1996    max -   Oct lastSun 2:00s   0   -
  1907.         // Asia/Kamchatka   Russia(RU)  12:00   Russia  PET%sT
  1908.         //----------------------------------------------------------
  1909.         new SimpleTimeZone(12*ONE_HOUR, "Pacific/Auckland" /*NZ%sT*/,
  1910.           Calendar.OCTOBER, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  1911.           Calendar.MARCH, 15, -Calendar.SUNDAY /*DOW>=DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1912.         // Rule NZ  1990    max -   Oct Sun>=1  2:00s   1:00    D
  1913.         // Rule NZ  1990    max -   Mar Sun>=15 2:00s   0   S
  1914.         // Pacific/Auckland New Zealand(NZ) 12:00   NZ  NZ%sT
  1915.         new SimpleTimeZone(12*ONE_HOUR, "NST" /*alias for Pacific/Auckland*/,
  1916.           Calendar.OCTOBER, 1, -Calendar.SUNDAY /*DOW>=DOM*/, 2*ONE_HOUR,
  1917.           Calendar.MARCH, 15, -Calendar.SUNDAY /*DOW>=DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1918.         //----------------------------------------------------------
  1919.         new SimpleTimeZone((int)(12.75*ONE_HOUR), "Pacific/Chatham" /*CHA%sT*/,
  1920.           Calendar.OCTOBER, 1, -Calendar.SUNDAY /*DOW>=DOM*/, (int)(2.75*ONE_HOUR),
  1921.           Calendar.MARCH, 15, -Calendar.SUNDAY /*DOW>=DOM*/, (int)(3.75*ONE_HOUR), 1*ONE_HOUR),
  1922.         // Rule Chatham 1990    max -   Oct Sun>=1  2:45s   1:00    D
  1923.         // Rule Chatham 1991    max -   Mar Sun>=15 2:45s   0   S
  1924.         // Pacific/Chatham  New Zealand(NZ) 12:45   Chatham CHA%sT
  1925.         //----------------------------------------------------------
  1926.         new SimpleTimeZone(13*ONE_HOUR, "Pacific/Enderbury" /*PHOT*/),
  1927.         // Pacific/Enderbury    Kiribati(KI)    13:00   -   PHOT
  1928.         //----------------------------------------------------------
  1929.         new SimpleTimeZone(13*ONE_HOUR, "Pacific/Tongatapu" /*TOT*/),
  1930.         // Pacific/Tongatapu    Tonga(TO)   13:00   -   TOT
  1931.         //----------------------------------------------------------
  1932.         new SimpleTimeZone(13*ONE_HOUR, "Asia/Anadyr" /*ANA%sT*/,
  1933.           Calendar.MARCH, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 2*ONE_HOUR,
  1934.           Calendar.OCTOBER, -1, Calendar.SUNDAY /*DOW_IN_DOM*/, 3*ONE_HOUR, 1*ONE_HOUR),
  1935.         // Rule Russia  1993    max -   Mar lastSun 2:00s   1:00    S
  1936.         // Rule Russia  1996    max -   Oct lastSun 2:00s   0   -
  1937.         // Asia/Anadyr  Russia(RU)  13:00   Russia  ANA%sT
  1938.         //----------------------------------------------------------
  1939.         new SimpleTimeZone(14*ONE_HOUR, "Pacific/Kiritimati" /*LINT*/),
  1940.         // Pacific/Kiritimati   Kiribati(KI)    14:00   -   LINT
  1941.     };
  1942.     // ---------------- END GENERATED DATA ----------------
  1943.  
  1944.     private static Hashtable lookup = new Hashtable(zones.length);
  1945.  
  1946.     static {
  1947.         for (int i=0; i < zones.length; ++i)
  1948.             lookup.put(zones[i].getID(), zones[i]);
  1949.     }
  1950. }
  1951.  
  1952. //eof
  1953.