/* java.util.TimeZone
   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2012
   Free Software Foundation, Inc.

This file is part of GNU Classpath.

GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING.  If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.

Linking this library statically or dynamically with other modules is
making a combined work based on this library.  Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.

As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module.  An independent module is a module which is not derived from
or based on this library.  If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so.  If you do not wish to do so, delete this
exception statement from your version. */


package java.util;

import gnu.classpath.SystemProperties;
import gnu.java.lang.CPStringBuilder;
import gnu.java.util.ZoneInfo;

import java.io.File;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.text.DateFormatSymbols;

/**
 * This class represents a time zone offset and handles daylight savings.
 *
 * You can get the default time zone with <code>getDefault</code>.
 * This represents the time zone where program is running.
 *
 * Another way to create a time zone is <code>getTimeZone</code>, where
 * you can give an identifier as parameter.  For instance, the identifier
 * of the Central European Time zone is "CET".
 *
 * With the <code>getAvailableIDs</code> method, you can get all the
 * supported time zone identifiers.
 *
 * @see Calendar
 * @see SimpleTimeZone
 * @author Jochen Hoenicke
 */
public abstract class TimeZone implements java.io.Serializable, Cloneable
{

  /**
   * Constant used to indicate that a short timezone abbreviation should
   * be returned, such as "EST"
   */
  public static final int SHORT = 0;

  /**
   * Constant used to indicate that a long timezone name should be
   * returned, such as "Eastern Standard Time".
   */
  public static final int LONG = 1;

  /**
   * The time zone identifier, e.g. PST.
   */
  private String ID;

  /**
   * The default time zone, as returned by getDefault.
   */
  private static TimeZone defaultZone0;

  /**
   * Tries to get the default TimeZone for this system if not already
   * set.  It will call <code>getDefaultTimeZone(String)</code> with
   * the result of <code>System.getProperty("user.timezone")</code>.
   * If that fails it calls <code>VMTimeZone.getDefaultTimeZoneId()</code>.
   * If that also fails GMT is returned.
   */
  private static synchronized TimeZone defaultZone()
  {
    /* Look up default timezone */
    if (defaultZone0 == null)
      {
        defaultZone0 = AccessController.doPrivileged
          (new PrivilegedAction<TimeZone>()
            {
              public TimeZone run()
              {
                TimeZone zone = null;

                // Prefer System property user.timezone.
                String tzid = System.getProperty("user.timezone");
                if (tzid != null && !tzid.equals(""))
                  zone = getDefaultTimeZone(tzid);

                // Try platfom specific way.
                if (zone == null)
                  zone = VMTimeZone.getDefaultTimeZoneId();

                // Fall back on GMT.
                if (zone == null)
                  zone = getTimeZone ("GMT");

                return zone;
              }
            });
      }

    return defaultZone0;
  }

  private static final long serialVersionUID = 3581463369166924961L;

  /**
   * Flag whether zoneinfo data should be used,
   * otherwise builtin timezone data will be provided.
   */
  private static String zoneinfo_dir;

  /**
   * Cached copy of getAvailableIDs().
   */
  private static String[] availableIDs = null;

  /**
   * JDK 1.1.x compatibility aliases.
   */
  private static HashMap<String,String> aliases0;

  /**
   * HashMap for timezones by ID.
   */
  private static HashMap<String,TimeZone> timezones0;
  /* initialize this static field lazily to overhead if
   * it is not needed:
   */
  // Package-private to avoid a trampoline.
  static HashMap<String,TimeZone> timezones()
  {
    if (timezones0 == null)
      {
        HashMap<String,TimeZone> timezones = new HashMap<String,TimeZone>();
        timezones0 = timezones;

        zoneinfo_dir = SystemProperties.getProperty("gnu.java.util.zoneinfo.dir");
        if (zoneinfo_dir != null && !new File(zoneinfo_dir).isDirectory())
          zoneinfo_dir = null;

        if (zoneinfo_dir != null)
          {
            aliases0 = new HashMap<String,String>();

            // These deprecated aliases for JDK 1.1.x compatibility
            // should take precedence over data files read from
            // /usr/share/zoneinfo.
            aliases0.put("ACT", "Australia/Darwin");
            aliases0.put("AET", "Australia/Sydney");
            aliases0.put("AGT", "America/Argentina/Buenos_Aires");
            aliases0.put("ART", "Africa/Cairo");
            aliases0.put("AST", "America/Juneau");
            aliases0.put("BST", "Asia/Colombo");
            aliases0.put("CAT", "Africa/Gaborone");
            aliases0.put("CNT", "America/St_Johns");
            aliases0.put("CST", "CST6CDT");
            aliases0.put("CTT", "Asia/Brunei");
            aliases0.put("EAT", "Indian/Comoro");
            aliases0.put("ECT", "CET");
            aliases0.put("EST", "EST5EDT");
            aliases0.put("EST5", "EST5EDT");
            aliases0.put("IET", "EST5EDT");
            aliases0.put("IST", "Asia/Calcutta");
            aliases0.put("JST", "Asia/Seoul");
            aliases0.put("MIT", "Pacific/Niue");
            aliases0.put("MST", "MST7MDT");
            aliases0.put("MST7", "MST7MDT");
            aliases0.put("NET", "Indian/Mauritius");
            aliases0.put("NST", "Pacific/Auckland");
            aliases0.put("PLT", "Indian/Kerguelen");
            aliases0.put("PNT", "MST7MDT");
            aliases0.put("PRT", "America/Anguilla");
            aliases0.put("PST", "PST8PDT");
            aliases0.put("SST", "Pacific/Ponape");
            aliases0.put("VST", "Asia/Bangkok");
            return timezones;
          }

        TimeZone tz;
        // Automatically generated by scripts/timezones.pl
        // XXX - Should we read this data from a file?
        tz = new SimpleTimeZone(-11000 * 3600, "MIT");
        timezones0.put("MIT", tz);
        timezones0.put("Pacific/Apia", tz);
        timezones0.put("Pacific/Midway", tz);
        timezones0.put("Pacific/Niue", tz);
        timezones0.put("Pacific/Pago_Pago", tz);
        tz = new SimpleTimeZone
          (-10000 * 3600, "America/Adak",
           Calendar.MARCH, 2, Calendar.SUNDAY, 2000 * 3600,
           Calendar.NOVEMBER, 1, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("America/Adak", tz);
        tz = new SimpleTimeZone(-10000 * 3600, "HST");
        timezones0.put("HST", tz);
        timezones0.put("Pacific/Fakaofo", tz);
        timezones0.put("Pacific/Honolulu", tz);
        timezones0.put("Pacific/Johnston", tz);
        timezones0.put("Pacific/Rarotonga", tz);
        timezones0.put("Pacific/Tahiti", tz);
        tz = new SimpleTimeZone(-9500 * 3600, "Pacific/Marquesas");
        timezones0.put("Pacific/Marquesas", tz);
        tz = new SimpleTimeZone
          (-9000 * 3600, "AST",
           Calendar.MARCH, 2, Calendar.SUNDAY, 2000 * 3600,
           Calendar.NOVEMBER, 1, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("AST", tz);
        timezones0.put("America/Anchorage", tz);
        timezones0.put("America/Juneau", tz);
        timezones0.put("America/Nome", tz);
        timezones0.put("America/Yakutat", tz);
        tz = new SimpleTimeZone(-9000 * 3600, "Pacific/Gambier");
        timezones0.put("Pacific/Gambier", tz);
        tz = new SimpleTimeZone
          (-8000 * 3600, "America/Tijuana",
           Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("America/Tijuana", tz);
        tz = new SimpleTimeZone
          (-8000 * 3600, "PST",
           Calendar.MARCH, 2, Calendar.SUNDAY, 2000 * 3600,
           Calendar.NOVEMBER, 1, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("PST", tz);
        timezones0.put("PST8PDT", tz);
        timezones0.put("America/Dawson", tz);
        timezones0.put("America/Los_Angeles", tz);
        timezones0.put("America/Vancouver", tz);
        timezones0.put("America/Whitehorse", tz);
        timezones0.put("US/Pacific-New", tz);
        tz = new SimpleTimeZone(-8000 * 3600, "Pacific/Pitcairn");
        timezones0.put("Pacific/Pitcairn", tz);
        tz = new SimpleTimeZone
          (-7000 * 3600, "America/Chihuahua",
           Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("America/Chihuahua", tz);
        timezones0.put("America/Mazatlan", tz);
        tz = new SimpleTimeZone(-7000 * 3600, "MST7");
        timezones0.put("MST7", tz);
        timezones0.put("PNT", tz);
        timezones0.put("America/Dawson_Creek", tz);
        timezones0.put("America/Hermosillo", tz);
        timezones0.put("America/Phoenix", tz);
        tz = new SimpleTimeZone
          (-7000 * 3600, "MST",
           Calendar.MARCH, 2, Calendar.SUNDAY, 2000 * 3600,
           Calendar.NOVEMBER, 1, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("MST", tz);
        timezones0.put("MST7MDT", tz);
        timezones0.put("America/Boise", tz);
        timezones0.put("America/Cambridge_Bay", tz);
        timezones0.put("America/Denver", tz);
        timezones0.put("America/Edmonton", tz);
        timezones0.put("America/Inuvik", tz);
        timezones0.put("America/Shiprock", tz);
        timezones0.put("America/Yellowknife", tz);
        tz = new SimpleTimeZone
          (-6000 * 3600, "America/Cancun",
           Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("America/Cancun", tz);
        timezones0.put("America/Merida", tz);
        timezones0.put("America/Mexico_City", tz);
        timezones0.put("America/Monterrey", tz);
        tz = new SimpleTimeZone(-6000 * 3600, "America/Belize");
        timezones0.put("America/Belize", tz);
        timezones0.put("America/Costa_Rica", tz);
        timezones0.put("America/El_Salvador", tz);
        timezones0.put("America/Guatemala", tz);
        timezones0.put("America/Managua", tz);
        timezones0.put("America/Regina", tz);
        timezones0.put("America/Swift_Current", tz);
        timezones0.put("America/Tegucigalpa", tz);
        timezones0.put("Pacific/Galapagos", tz);
        tz = new SimpleTimeZone
          (-6000 * 3600, "CST",
           Calendar.MARCH, 2, Calendar.SUNDAY, 2000 * 3600,
           Calendar.NOVEMBER, 1, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("CST", tz);
        timezones0.put("CST6CDT", tz);
        timezones0.put("America/Chicago", tz);
        timezones0.put("America/Indiana/Knox", tz);
        timezones0.put("America/Indiana/Petersburg", tz);
        timezones0.put("America/Indiana/Vincennes", tz);
        timezones0.put("America/Menominee", tz);
        timezones0.put("America/North_Dakota/Center", tz);
        timezones0.put("America/North_Dakota/New_Salem", tz);
        timezones0.put("America/Rainy_River", tz);
        timezones0.put("America/Rankin_Inlet", tz);
        timezones0.put("America/Winnipeg", tz);
        tz = new SimpleTimeZone
          (-6000 * 3600, "Pacific/Easter",
           Calendar.OCTOBER, 2, Calendar.SATURDAY, 22000 * 3600,
           Calendar.MARCH, 2, Calendar.SATURDAY, 22000 * 3600);
        timezones0.put("Pacific/Easter", tz);
        tz = new SimpleTimeZone(-5000 * 3600, "EST5");
        timezones0.put("EST5", tz);
        timezones0.put("IET", tz);
        timezones0.put("America/Atikokan", tz);
        timezones0.put("America/Bogota", tz);
        timezones0.put("America/Cayman", tz);
        timezones0.put("America/Eirunepe", tz);
        timezones0.put("America/Guayaquil", tz);
        timezones0.put("America/Jamaica", tz);
        timezones0.put("America/Lima", tz);
        timezones0.put("America/Panama", tz);
        timezones0.put("America/Rio_Branco", tz);
        tz = new SimpleTimeZone
          (-5000 * 3600, "America/Havana",
           Calendar.APRIL, 1, Calendar.SUNDAY, 0 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 1000 * 3600);
        timezones0.put("America/Havana", tz);
        tz = new SimpleTimeZone
          (-5000 * 3600, "America/Grand_Turk",
           Calendar.APRIL, 1, Calendar.SUNDAY, 0 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600);
        timezones0.put("America/Grand_Turk", tz);
        timezones0.put("America/Port-au-Prince", tz);
        tz = new SimpleTimeZone
          (-5000 * 3600, "EST",
           Calendar.MARCH, 2, Calendar.SUNDAY, 2000 * 3600,
           Calendar.NOVEMBER, 1, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("EST", tz);
        timezones0.put("EST5EDT", tz);
        timezones0.put("America/Detroit", tz);
        timezones0.put("America/Indiana/Indianapolis", tz);
        timezones0.put("America/Indiana/Marengo", tz);
        timezones0.put("America/Indiana/Vevay", tz);
        timezones0.put("America/Iqaluit", tz);
        timezones0.put("America/Kentucky/Louisville", tz);
        timezones0.put("America/Kentucky/Monticello", tz);
        timezones0.put("America/Montreal", tz);
        timezones0.put("America/Nassau", tz);
        timezones0.put("America/New_York", tz);
        timezones0.put("America/Nipigon", tz);
        timezones0.put("America/Pangnirtung", tz);
        timezones0.put("America/Thunder_Bay", tz);
        timezones0.put("America/Toronto", tz);
        tz = new SimpleTimeZone
          (-4000 * 3600, "America/Asuncion",
           Calendar.OCTOBER, 3, Calendar.SUNDAY, 0 * 3600,
           Calendar.MARCH, 2, Calendar.SUNDAY, 0 * 3600);
        timezones0.put("America/Asuncion", tz);
        tz = new SimpleTimeZone(-4000 * 3600, "PRT");
        timezones0.put("PRT", tz);
        timezones0.put("America/Anguilla", tz);
        timezones0.put("America/Antigua", tz);
        timezones0.put("America/Aruba", tz);
        timezones0.put("America/Barbados", tz);
        timezones0.put("America/Blanc-Sablon", tz);
        timezones0.put("America/Boa_Vista", tz);
        timezones0.put("America/Caracas", tz);
        timezones0.put("America/Curacao", tz);
        timezones0.put("America/Dominica", tz);
        timezones0.put("America/Grenada", tz);
        timezones0.put("America/Guadeloupe", tz);
        timezones0.put("America/Guyana", tz);
        timezones0.put("America/La_Paz", tz);
        timezones0.put("America/Manaus", tz);
        timezones0.put("America/Martinique", tz);
        timezones0.put("America/Montserrat", tz);
        timezones0.put("America/Port_of_Spain", tz);
        timezones0.put("America/Porto_Velho", tz);
        timezones0.put("America/Puerto_Rico", tz);
        timezones0.put("America/Santo_Domingo", tz);
        timezones0.put("America/St_Kitts", tz);
        timezones0.put("America/St_Lucia", tz);
        timezones0.put("America/St_Thomas", tz);
        timezones0.put("America/St_Vincent", tz);
        timezones0.put("America/Tortola", tz);
        tz = new SimpleTimeZone
          (-4000 * 3600, "America/Campo_Grande",
           Calendar.NOVEMBER, 1, Calendar.SUNDAY, 0 * 3600,
           Calendar.FEBRUARY, -1, Calendar.SUNDAY, 0 * 3600);
        timezones0.put("America/Campo_Grande", tz);
        timezones0.put("America/Cuiaba", tz);
        tz = new SimpleTimeZone
          (-4000 * 3600, "America/Goose_Bay",
           Calendar.MARCH, 2, Calendar.SUNDAY, 60000,
           Calendar.NOVEMBER, 1, Calendar.SUNDAY, 60000);
        timezones0.put("America/Goose_Bay", tz);
        tz = new SimpleTimeZone
          (-4000 * 3600, "America/Glace_Bay",
           Calendar.MARCH, 2, Calendar.SUNDAY, 2000 * 3600,
           Calendar.NOVEMBER, 1, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("America/Glace_Bay", tz);
        timezones0.put("America/Halifax", tz);
        timezones0.put("America/Moncton", tz);
        timezones0.put("America/Thule", tz);
        timezones0.put("Atlantic/Bermuda", tz);
        tz = new SimpleTimeZone
          (-4000 * 3600, "America/Santiago",
           Calendar.OCTOBER, 9, -Calendar.SUNDAY, 0 * 3600,
           Calendar.MARCH, 9, -Calendar.SUNDAY, 0 * 3600);
        timezones0.put("America/Santiago", tz);
        timezones0.put("Antarctica/Palmer", tz);
        tz = new SimpleTimeZone
          (-4000 * 3600, "Atlantic/Stanley",
           Calendar.SEPTEMBER, 1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.APRIL, 3, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("Atlantic/Stanley", tz);
        tz = new SimpleTimeZone
          (-3500 * 3600, "CNT",
           Calendar.MARCH, 2, Calendar.SUNDAY, 60000,
           Calendar.NOVEMBER, 1, Calendar.SUNDAY, 60000);
        timezones0.put("CNT", tz);
        timezones0.put("America/St_Johns", tz);
        tz = new SimpleTimeZone
          (-3000 * 3600, "America/Godthab",
           Calendar.MARCH, 30, -Calendar.SATURDAY, 22000 * 3600,
           Calendar.OCTOBER, 30, -Calendar.SATURDAY, 23000 * 3600);
        timezones0.put("America/Godthab", tz);
        tz = new SimpleTimeZone
          (-3000 * 3600, "America/Miquelon",
           Calendar.MARCH, 2, Calendar.SUNDAY, 2000 * 3600,
           Calendar.NOVEMBER, 1, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("America/Miquelon", tz);
        tz = new SimpleTimeZone
          (-3000 * 3600, "America/Montevideo",
           Calendar.OCTOBER, 1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.MARCH, 2, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("America/Montevideo", tz);
        tz = new SimpleTimeZone
          (-3000 * 3600, "America/Sao_Paulo",
           Calendar.NOVEMBER, 1, Calendar.SUNDAY, 0 * 3600,
           Calendar.FEBRUARY, -1, Calendar.SUNDAY, 0 * 3600);
        timezones0.put("America/Sao_Paulo", tz);
        tz = new SimpleTimeZone(-3000 * 3600, "AGT");
        timezones0.put("AGT", tz);
        timezones0.put("America/Araguaina", tz);
        timezones0.put("America/Argentina/Buenos_Aires", tz);
        timezones0.put("America/Argentina/Catamarca", tz);
        timezones0.put("America/Argentina/Cordoba", tz);
        timezones0.put("America/Argentina/Jujuy", tz);
        timezones0.put("America/Argentina/La_Rioja", tz);
        timezones0.put("America/Argentina/Mendoza", tz);
        timezones0.put("America/Argentina/Rio_Gallegos", tz);
        timezones0.put("America/Argentina/San_Juan", tz);
        timezones0.put("America/Argentina/Tucuman", tz);
        timezones0.put("America/Argentina/Ushuaia", tz);
        timezones0.put("America/Bahia", tz);
        timezones0.put("America/Belem", tz);
        timezones0.put("America/Cayenne", tz);
        timezones0.put("America/Fortaleza", tz);
        timezones0.put("America/Maceio", tz);
        timezones0.put("America/Paramaribo", tz);
        timezones0.put("America/Recife", tz);
        timezones0.put("Antarctica/Rothera", tz);
        tz = new SimpleTimeZone(-2000 * 3600, "America/Noronha");
        timezones0.put("America/Noronha", tz);
        timezones0.put("Atlantic/South_Georgia", tz);
        tz = new SimpleTimeZone
          (-1000 * 3600, "America/Scoresbysund",
           Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 1000 * 3600);
        timezones0.put("America/Scoresbysund", tz);
        timezones0.put("Atlantic/Azores", tz);
        tz = new SimpleTimeZone(-1000 * 3600, "Atlantic/Cape_Verde");
        timezones0.put("Atlantic/Cape_Verde", tz);
        tz = new SimpleTimeZone(0 * 3600, "GMT");
        timezones0.put("GMT", tz);
        timezones0.put("UTC", tz);
        timezones0.put("Africa/Abidjan", tz);
        timezones0.put("Africa/Accra", tz);
        timezones0.put("Africa/Bamako", tz);
        timezones0.put("Africa/Banjul", tz);
        timezones0.put("Africa/Bissau", tz);
        timezones0.put("Africa/Casablanca", tz);
        timezones0.put("Africa/Conakry", tz);
        timezones0.put("Africa/Dakar", tz);
        timezones0.put("Africa/El_Aaiun", tz);
        timezones0.put("Africa/Freetown", tz);
        timezones0.put("Africa/Lome", tz);
        timezones0.put("Africa/Monrovia", tz);
        timezones0.put("Africa/Nouakchott", tz);
        timezones0.put("Africa/Ouagadougou", tz);
        timezones0.put("Africa/Sao_Tome", tz);
        timezones0.put("America/Danmarkshavn", tz);
        timezones0.put("Atlantic/Reykjavik", tz);
        timezones0.put("Atlantic/St_Helena", tz);
        tz = new SimpleTimeZone
          (0 * 3600, "WET",
           Calendar.MARCH, -1, Calendar.SUNDAY, 1000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("WET", tz);
        timezones0.put("Atlantic/Canary", tz);
        timezones0.put("Atlantic/Faroe", tz);
        timezones0.put("Atlantic/Madeira", tz);
        timezones0.put("Europe/Dublin", tz);
        timezones0.put("Europe/Guernsey", tz);
        timezones0.put("Europe/Isle_of_Man", tz);
        timezones0.put("Europe/Jersey", tz);
        timezones0.put("Europe/Lisbon", tz);
        timezones0.put("Europe/London", tz);
        tz = new SimpleTimeZone(1000 * 3600, "Africa/Algiers");
        timezones0.put("Africa/Algiers", tz);
        timezones0.put("Africa/Bangui", tz);
        timezones0.put("Africa/Brazzaville", tz);
        timezones0.put("Africa/Douala", tz);
        timezones0.put("Africa/Kinshasa", tz);
        timezones0.put("Africa/Lagos", tz);
        timezones0.put("Africa/Libreville", tz);
        timezones0.put("Africa/Luanda", tz);
        timezones0.put("Africa/Malabo", tz);
        timezones0.put("Africa/Ndjamena", tz);
        timezones0.put("Africa/Niamey", tz);
        timezones0.put("Africa/Porto-Novo", tz);
        tz = new SimpleTimeZone
          (1000 * 3600, "Africa/Windhoek",
           Calendar.SEPTEMBER, 1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600);
        timezones0.put("Africa/Windhoek", tz);
        tz = new SimpleTimeZone
          (1000 * 3600, "CET",
           Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("CET", tz);
        timezones0.put("ECT", tz);
        timezones0.put("MET", tz);
        timezones0.put("Africa/Ceuta", tz);
        timezones0.put("Africa/Tunis", tz);
        timezones0.put("Arctic/Longyearbyen", tz);
        timezones0.put("Atlantic/Jan_Mayen", tz);
        timezones0.put("Europe/Amsterdam", tz);
        timezones0.put("Europe/Andorra", tz);
        timezones0.put("Europe/Belgrade", tz);
        timezones0.put("Europe/Berlin", tz);
        timezones0.put("Europe/Bratislava", tz);
        timezones0.put("Europe/Brussels", tz);
        timezones0.put("Europe/Budapest", tz);
        timezones0.put("Europe/Copenhagen", tz);
        timezones0.put("Europe/Gibraltar", tz);
        timezones0.put("Europe/Ljubljana", tz);
        timezones0.put("Europe/Luxembourg", tz);
        timezones0.put("Europe/Madrid", tz);
        timezones0.put("Europe/Malta", tz);
        timezones0.put("Europe/Monaco", tz);
        timezones0.put("Europe/Oslo", tz);
        timezones0.put("Europe/Paris", tz);
        timezones0.put("Europe/Podgorica", tz);
        timezones0.put("Europe/Prague", tz);
        timezones0.put("Europe/Rome", tz);
        timezones0.put("Europe/San_Marino", tz);
        timezones0.put("Europe/Sarajevo", tz);
        timezones0.put("Europe/Skopje", tz);
        timezones0.put("Europe/Stockholm", tz);
        timezones0.put("Europe/Tirane", tz);
        timezones0.put("Europe/Vaduz", tz);
        timezones0.put("Europe/Vatican", tz);
        timezones0.put("Europe/Vienna", tz);
        timezones0.put("Europe/Warsaw", tz);
        timezones0.put("Europe/Zagreb", tz);
        timezones0.put("Europe/Zurich", tz);
        tz = new SimpleTimeZone
          (2000 * 3600, "ART",
           Calendar.APRIL, -1, Calendar.FRIDAY, 0 * 3600,
           Calendar.SEPTEMBER, -1, Calendar.THURSDAY, 24000 * 3600);
        timezones0.put("ART", tz);
        timezones0.put("Africa/Cairo", tz);
        tz = new SimpleTimeZone(2000 * 3600, "CAT");
        timezones0.put("CAT", tz);
        timezones0.put("Africa/Blantyre", tz);
        timezones0.put("Africa/Bujumbura", tz);
        timezones0.put("Africa/Gaborone", tz);
        timezones0.put("Africa/Harare", tz);
        timezones0.put("Africa/Johannesburg", tz);
        timezones0.put("Africa/Kigali", tz);
        timezones0.put("Africa/Lubumbashi", tz);
        timezones0.put("Africa/Lusaka", tz);
        timezones0.put("Africa/Maputo", tz);
        timezones0.put("Africa/Maseru", tz);
        timezones0.put("Africa/Mbabane", tz);
        timezones0.put("Africa/Tripoli", tz);
        timezones0.put("Asia/Jerusalem", tz);
        tz = new SimpleTimeZone
          (2000 * 3600, "Asia/Amman",
           Calendar.MARCH, -1, Calendar.THURSDAY, 0 * 3600,
           Calendar.OCTOBER, -1, Calendar.FRIDAY, 1000 * 3600);
        timezones0.put("Asia/Amman", tz);
        tz = new SimpleTimeZone
          (2000 * 3600, "Asia/Beirut",
           Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600);
        timezones0.put("Asia/Beirut", tz);
        tz = new SimpleTimeZone
          (2000 * 3600, "Asia/Damascus",
           Calendar.APRIL, 1, 0, 0 * 3600,
           Calendar.OCTOBER, 1, 0, 0 * 3600);
        timezones0.put("Asia/Damascus", tz);
        tz = new SimpleTimeZone
          (2000 * 3600, "Asia/Gaza",
           Calendar.APRIL, 1, 0, 0 * 3600,
           Calendar.OCTOBER, 3, Calendar.FRIDAY, 0 * 3600);
        timezones0.put("Asia/Gaza", tz);
        tz = new SimpleTimeZone
          (2000 * 3600, "EET",
           Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 4000 * 3600);
        timezones0.put("EET", tz);
        timezones0.put("Asia/Istanbul", tz);
        timezones0.put("Asia/Nicosia", tz);
        timezones0.put("Europe/Athens", tz);
        timezones0.put("Europe/Bucharest", tz);
        timezones0.put("Europe/Chisinau", tz);
        timezones0.put("Europe/Helsinki", tz);
        timezones0.put("Europe/Istanbul", tz);
        timezones0.put("Europe/Kiev", tz);
        timezones0.put("Europe/Mariehamn", tz);
        timezones0.put("Europe/Nicosia", tz);
        timezones0.put("Europe/Riga", tz);
        timezones0.put("Europe/Simferopol", tz);
        timezones0.put("Europe/Sofia", tz);
        timezones0.put("Europe/Tallinn", tz);
        timezones0.put("Europe/Uzhgorod", tz);
        timezones0.put("Europe/Vilnius", tz);
        timezones0.put("Europe/Zaporozhye", tz);
        tz = new SimpleTimeZone
          (2000 * 3600, "Europe/Kaliningrad",
           Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("Europe/Kaliningrad", tz);
        timezones0.put("Europe/Minsk", tz);
        tz = new SimpleTimeZone
          (3000 * 3600, "Asia/Baghdad",
           Calendar.APRIL, 1, 0, 3000 * 3600,
           Calendar.OCTOBER, 1, 0, 4000 * 3600);
        timezones0.put("Asia/Baghdad", tz);
        tz = new SimpleTimeZone
          (3000 * 3600, "Europe/Moscow",
           Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("Europe/Moscow", tz);
        timezones0.put("Europe/Volgograd", tz);
        tz = new SimpleTimeZone(3000 * 3600, "EAT");
        timezones0.put("EAT", tz);
        timezones0.put("Africa/Addis_Ababa", tz);
        timezones0.put("Africa/Asmara", tz);
        timezones0.put("Africa/Dar_es_Salaam", tz);
        timezones0.put("Africa/Djibouti", tz);
        timezones0.put("Africa/Kampala", tz);
        timezones0.put("Africa/Khartoum", tz);
        timezones0.put("Africa/Mogadishu", tz);
        timezones0.put("Africa/Nairobi", tz);
        timezones0.put("Antarctica/Syowa", tz);
        timezones0.put("Asia/Aden", tz);
        timezones0.put("Asia/Bahrain", tz);
        timezones0.put("Asia/Kuwait", tz);
        timezones0.put("Asia/Qatar", tz);
        timezones0.put("Asia/Riyadh", tz);
        timezones0.put("Indian/Antananarivo", tz);
        timezones0.put("Indian/Comoro", tz);
        timezones0.put("Indian/Mayotte", tz);
        tz = new SimpleTimeZone(3500 * 3600, "Asia/Tehran");
        timezones0.put("Asia/Tehran", tz);
        tz = new SimpleTimeZone
          (4000 * 3600, "Asia/Baku",
           Calendar.MARCH, -1, Calendar.SUNDAY, 4000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 5000 * 3600);
        timezones0.put("Asia/Baku", tz);
        tz = new SimpleTimeZone
          (4000 * 3600, "Asia/Yerevan",
           Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("Asia/Yerevan", tz);
        timezones0.put("Europe/Samara", tz);
        tz = new SimpleTimeZone(4000 * 3600, "NET");
        timezones0.put("NET", tz);
        timezones0.put("Asia/Dubai", tz);
        timezones0.put("Asia/Muscat", tz);
        timezones0.put("Asia/Tbilisi", tz);
        timezones0.put("Indian/Mahe", tz);
        timezones0.put("Indian/Mauritius", tz);
        timezones0.put("Indian/Reunion", tz);
        tz = new SimpleTimeZone(4500 * 3600, "Asia/Kabul");
        timezones0.put("Asia/Kabul", tz);
        tz = new SimpleTimeZone
          (5000 * 3600, "Asia/Yekaterinburg",
           Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("Asia/Yekaterinburg", tz);
        tz = new SimpleTimeZone(5000 * 3600, "PLT");
        timezones0.put("PLT", tz);
        timezones0.put("Asia/Aqtau", tz);
        timezones0.put("Asia/Aqtobe", tz);
        timezones0.put("Asia/Ashgabat", tz);
        timezones0.put("Asia/Dushanbe", tz);
        timezones0.put("Asia/Karachi", tz);
        timezones0.put("Asia/Oral", tz);
        timezones0.put("Asia/Samarkand", tz);
        timezones0.put("Asia/Tashkent", tz);
        timezones0.put("Indian/Kerguelen", tz);
        timezones0.put("Indian/Maldives", tz);
        tz = new SimpleTimeZone(5500 * 3600, "BST");
        timezones0.put("BST", tz);
        timezones0.put("IST", tz);
        timezones0.put("Asia/Calcutta", tz);
        timezones0.put("Asia/Colombo", tz);
        tz = new SimpleTimeZone(5750 * 3600, "Asia/Katmandu");
        timezones0.put("Asia/Katmandu", tz);
        tz = new SimpleTimeZone(6000 * 3600, "Antarctica/Mawson");
        timezones0.put("Antarctica/Mawson", tz);
        timezones0.put("Antarctica/Vostok", tz);
        timezones0.put("Asia/Almaty", tz);
        timezones0.put("Asia/Bishkek", tz);
        timezones0.put("Asia/Dhaka", tz);
        timezones0.put("Asia/Qyzylorda", tz);
        timezones0.put("Asia/Thimphu", tz);
        timezones0.put("Indian/Chagos", tz);
        tz = new SimpleTimeZone
          (6000 * 3600, "Asia/Novosibirsk",
           Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("Asia/Novosibirsk", tz);
        timezones0.put("Asia/Omsk", tz);
        tz = new SimpleTimeZone(6500 * 3600, "Asia/Rangoon");
        timezones0.put("Asia/Rangoon", tz);
        timezones0.put("Indian/Cocos", tz);
        tz = new SimpleTimeZone(7000 * 3600, "VST");
        timezones0.put("VST", tz);
        timezones0.put("Antarctica/Davis", tz);
        timezones0.put("Asia/Bangkok", tz);
        timezones0.put("Asia/Jakarta", tz);
        timezones0.put("Asia/Phnom_Penh", tz);
        timezones0.put("Asia/Pontianak", tz);
        timezones0.put("Asia/Saigon", tz);
        timezones0.put("Asia/Vientiane", tz);
        timezones0.put("Indian/Christmas", tz);
        tz = new SimpleTimeZone
          (7000 * 3600, "Asia/Hovd",
           Calendar.MARCH, -1, Calendar.SATURDAY, 2000 * 3600,
           Calendar.SEPTEMBER, -1, Calendar.SATURDAY, 2000 * 3600);
        timezones0.put("Asia/Hovd", tz);
        tz = new SimpleTimeZone
          (7000 * 3600, "Asia/Krasnoyarsk",
           Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("Asia/Krasnoyarsk", tz);
        tz = new SimpleTimeZone(8000 * 3600, "CTT");
        timezones0.put("CTT", tz);
        timezones0.put("Antarctica/Casey", tz);
        timezones0.put("Asia/Brunei", tz);
        timezones0.put("Asia/Chongqing", tz);
        timezones0.put("Asia/Harbin", tz);
        timezones0.put("Asia/Hong_Kong", tz);
        timezones0.put("Asia/Kashgar", tz);
        timezones0.put("Asia/Kuala_Lumpur", tz);
        timezones0.put("Asia/Kuching", tz);
        timezones0.put("Asia/Macau", tz);
        timezones0.put("Asia/Makassar", tz);
        timezones0.put("Asia/Manila", tz);
        timezones0.put("Asia/Shanghai", tz);
        timezones0.put("Asia/Singapore", tz);
        timezones0.put("Asia/Taipei", tz);
        timezones0.put("Asia/Urumqi", tz);
        timezones0.put("Australia/Perth", tz);
        tz = new SimpleTimeZone
          (8000 * 3600, "Asia/Irkutsk",
           Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("Asia/Irkutsk", tz);
        tz = new SimpleTimeZone
          (8000 * 3600, "Asia/Ulaanbaatar",
           Calendar.MARCH, -1, Calendar.SATURDAY, 2000 * 3600,
           Calendar.SEPTEMBER, -1, Calendar.SATURDAY, 2000 * 3600);
        timezones0.put("Asia/Ulaanbaatar", tz);
        tz = new SimpleTimeZone(8750 * 3600, "Australia/Eucla");
        timezones0.put("Australia/Eucla", tz);
        tz = new SimpleTimeZone
          (9000 * 3600, "Asia/Choibalsan",
           Calendar.MARCH, -1, Calendar.SATURDAY, 2000 * 3600,
           Calendar.SEPTEMBER, -1, Calendar.SATURDAY, 2000 * 3600);
        timezones0.put("Asia/Choibalsan", tz);
        tz = new SimpleTimeZone(9000 * 3600, "JST");
        timezones0.put("JST", tz);
        timezones0.put("Asia/Dili", tz);
        timezones0.put("Asia/Jayapura", tz);
        timezones0.put("Asia/Pyongyang", tz);
        timezones0.put("Asia/Seoul", tz);
        timezones0.put("Asia/Tokyo", tz);
        timezones0.put("Pacific/Palau", tz);
        tz = new SimpleTimeZone
          (9000 * 3600, "Asia/Yakutsk",
           Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("Asia/Yakutsk", tz);
        tz = new SimpleTimeZone
          (9500 * 3600, "Australia/Adelaide",
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("Australia/Adelaide", tz);
        timezones0.put("Australia/Broken_Hill", tz);
        tz = new SimpleTimeZone(9500 * 3600, "ACT");
        timezones0.put("ACT", tz);
        timezones0.put("Australia/Darwin", tz);
        tz = new SimpleTimeZone(10000 * 3600, "Antarctica/DumontDUrville");
        timezones0.put("Antarctica/DumontDUrville", tz);
        timezones0.put("Australia/Brisbane", tz);
        timezones0.put("Australia/Lindeman", tz);
        timezones0.put("Pacific/Guam", tz);
        timezones0.put("Pacific/Port_Moresby", tz);
        timezones0.put("Pacific/Saipan", tz);
        timezones0.put("Pacific/Truk", tz);
        tz = new SimpleTimeZone
          (10000 * 3600, "Asia/Sakhalin",
           Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("Asia/Sakhalin", tz);
        timezones0.put("Asia/Vladivostok", tz);
        tz = new SimpleTimeZone
          (10000 * 3600, "Australia/Currie",
           Calendar.OCTOBER, 1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("Australia/Currie", tz);
        timezones0.put("Australia/Hobart", tz);
        tz = new SimpleTimeZone
          (10000 * 3600, "AET",
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.MARCH, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("AET", tz);
        timezones0.put("Australia/Melbourne", tz);
        timezones0.put("Australia/Sydney", tz);
        tz = new SimpleTimeZone
          (10500 * 3600, "Australia/Lord_Howe",
          Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600,
          Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, 500 * 3600);
        timezones0.put("Australia/Lord_Howe", tz);
        tz = new SimpleTimeZone
          (11000 * 3600, "Asia/Magadan",
           Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("Asia/Magadan", tz);
        tz = new SimpleTimeZone(11000 * 3600, "SST");
        timezones0.put("SST", tz);
        timezones0.put("Pacific/Efate", tz);
        timezones0.put("Pacific/Guadalcanal", tz);
        timezones0.put("Pacific/Kosrae", tz);
        timezones0.put("Pacific/Noumea", tz);
        timezones0.put("Pacific/Ponape", tz);
        tz = new SimpleTimeZone(11500 * 3600, "Pacific/Norfolk");
        timezones0.put("Pacific/Norfolk", tz);
        tz = new SimpleTimeZone
          (12000 * 3600, "NST",
           Calendar.OCTOBER, 1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.MARCH, 3, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("NST", tz);
        timezones0.put("Antarctica/McMurdo", tz);
        timezones0.put("Antarctica/South_Pole", tz);
        timezones0.put("Pacific/Auckland", tz);
        tz = new SimpleTimeZone
          (12000 * 3600, "Asia/Anadyr",
           Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
           Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);
        timezones0.put("Asia/Anadyr", tz);
        timezones0.put("Asia/Kamchatka", tz);
        tz = new SimpleTimeZone(12000 * 3600, "Pacific/Fiji");
        timezones0.put("Pacific/Fiji", tz);
        timezones0.put("Pacific/Funafuti", tz);
        timezones0.put("Pacific/Kwajalein", tz);
        timezones0.put("Pacific/Majuro", tz);
        timezones0.put("Pacific/Nauru", tz);
        timezones0.put("Pacific/Tarawa", tz);
        timezones0.put("Pacific/Wake", tz);
        timezones0.put("Pacific/Wallis", tz);
        tz = new SimpleTimeZone
          (12750 * 3600, "Pacific/Chatham",
           Calendar.OCTOBER, 1, Calendar.SUNDAY, 2750 * 3600,
           Calendar.MARCH, 3, Calendar.SUNDAY, 3750 * 3600);
        timezones0.put("Pacific/Chatham", tz);
        tz = new SimpleTimeZone(13000 * 3600, "Pacific/Enderbury");
        timezones0.put("Pacific/Enderbury", tz);
        timezones0.put("Pacific/Tongatapu", tz);
        tz = new SimpleTimeZone(14000 * 3600, "Pacific/Kiritimati");
        timezones0.put("Pacific/Kiritimati", tz);
      }
    return timezones0;
  }

  /**
   * Maps a time zone name (with optional GMT offset and daylight time
   * zone name) to one of the known time zones.  This method called
   * with the result of <code>System.getProperty("user.timezone")</code>
   * or <code>getDefaultTimeZoneId()</code>.  Note that giving one of
   * the standard tz data names from ftp://elsie.nci.nih.gov/pub/ is
   * preferred.
   * The time zone name can be given as follows:
   * <code>(standard zone name)[(GMT offset)[(DST zone name)[DST offset]]]
   * </code>
   * <p>
   * If only a (standard zone name) is given (no numbers in the
   * String) then it gets mapped directly to the TimeZone with that
   * name, if that fails null is returned.
   * <p>
   * Alternately, a POSIX-style TZ string can be given, defining the time zone:
   * <code>std offset dst offset,date/time,date/time</code>
   * See the glibc manual, or the man page for <code>tzset</code> for details
   * of this format.
   * <p>
   * A GMT offset is the offset to add to the local time to get GMT.
   * If a (GMT offset) is included (either in seconds or hours) then
   * an attempt is made to find a TimeZone name matching both the name
   * and the offset (that doesn't observe daylight time, if the
   * timezone observes daylight time then you must include a daylight
   * time zone name after the offset), if that fails then a TimeZone
   * with the given GMT offset is returned (whether or not the
   * TimeZone observes daylight time is ignored), if that also fails
   * the GMT TimeZone is returned.
   * <p>
   * If the String ends with (GMT offset)(daylight time zone name)
   * then an attempt is made to find a TimeZone with the given name and
   * GMT offset that also observes (the daylight time zone name is not
   * currently used in any other way), if that fails a TimeZone with
   * the given GMT offset that observes daylight time is returned, if
   * that also fails the GMT TimeZone is returned.
   * <p>
   * Examples: In Chicago, the time zone id could be "CST6CDT", but
   * the preferred name would be "America/Chicago".  In Indianapolis
   * (which does not have Daylight Savings Time) the string could be
   * "EST5", but the preferred name would be "America/Indianapolis".
   * The standard time zone name for The Netherlands is "Europe/Amsterdam",
   * but can also be given as "CET-1CEST".
   */
  static TimeZone getDefaultTimeZone(String sysTimeZoneId)
  {
    String stdName = null;
    int stdOffs;
    int dstOffs;
    try
      {
        int idLength = sysTimeZoneId.length();

        int index = 0;
        int prevIndex;
        char c;

        // get std
        do
          c = sysTimeZoneId.charAt(index);
        while (c != '+' && c != '-' && c != ',' && c != ':'
               && ! Character.isDigit(c) && c != '\0' && ++index < idLength);

        if (index >= idLength)
          return getTimeZoneInternal(sysTimeZoneId);

        stdName = sysTimeZoneId.substring(0, index);
        prevIndex = index;

        // get the std offset
        do
          c = sysTimeZoneId.charAt(index++);
        while ((c == '-' || c == '+' || c == ':' || Character.isDigit(c))
               && index < idLength);
        if (index < idLength)
          index--;

        { // convert the dst string to a millis number
            String offset = sysTimeZoneId.substring(prevIndex, index);
            prevIndex = index;

            if (offset.charAt(0) == '+' || offset.charAt(0) == '-')
              stdOffs = parseTime(offset.substring(1));
            else
              stdOffs = parseTime(offset);

            if (offset.charAt(0) == '-')
              stdOffs = -stdOffs;

            // TZ timezone offsets are positive when WEST of the meridian.
            stdOffs = -stdOffs;
        }

        // Done yet? (Format: std offset)
        if (index >= idLength)
          {
            // Do we have an existing timezone with that name and offset?
            TimeZone tz = getTimeZoneInternal(stdName);
            if (tz != null)
              if (tz.getRawOffset() == stdOffs)
                return tz;

            // Custom then.
            return new SimpleTimeZone(stdOffs, stdName);
          }

        // get dst
        do
          c = sysTimeZoneId.charAt(index);
        while (c != '+' && c != '-' && c != ',' && c != ':'
               && ! Character.isDigit(c) && c != '\0' && ++index < idLength);

        // Done yet? (Format: std offset dst)
        if (index >= idLength)
          {
            // Do we have an existing timezone with that name and offset
            // which has DST?
            TimeZone tz = getTimeZoneInternal(stdName);
            if (tz != null)
              if (tz.getRawOffset() == stdOffs && tz.useDaylightTime())
                return tz;

            // Custom then.
            return new SimpleTimeZone(stdOffs, stdName);
          }

        // get the dst offset
        prevIndex = index;
        do
          c = sysTimeZoneId.charAt(index++);
        while ((c == '-' || c == '+' || c == ':' || Character.isDigit(c))
               && index < idLength);
        if (index < idLength)
          index--;

        if (index == prevIndex && (c == ',' || c == ';'))
          {
            // Missing dst offset defaults to one hour ahead of standard
            // time.
            dstOffs = stdOffs + 60 * 60 * 1000;
          }
        else
          { // convert the dst string to a millis number
            String offset = sysTimeZoneId.substring(prevIndex, index);
            prevIndex = index;

            if (offset.charAt(0) == '+' || offset.charAt(0) == '-')
              dstOffs = parseTime(offset.substring(1));
            else
              dstOffs = parseTime(offset);

            if (offset.charAt(0) == '-')
              dstOffs = -dstOffs;

            // TZ timezone offsets are positive when WEST of the meridian.
            dstOffs = -dstOffs;
          }

        // Done yet? (Format: std offset dst offset)
        // FIXME: We don't support DST without a rule given. Should we?
        if (index >= idLength)
          {
            // Time Zone existing with same name, dst and offsets?
            TimeZone tz = getTimeZoneInternal(stdName);
            if (tz != null)
              if (tz.getRawOffset() == stdOffs && tz.useDaylightTime()
                  && tz.getDSTSavings() == (dstOffs - stdOffs))
                return tz;

            return new SimpleTimeZone(stdOffs, stdName);
          }

        // get the DST rule
        if (sysTimeZoneId.charAt(index) == ','
            || sysTimeZoneId.charAt(index) == ';')
          {
            index++;
            int offs = index;
            while (sysTimeZoneId.charAt(index) != ','
                   && sysTimeZoneId.charAt(index) != ';')
              index++;
            String startTime = sysTimeZoneId.substring(offs, index);
            index++;
            String endTime = sysTimeZoneId.substring(index);

            index = startTime.indexOf('/');
            int startMillis;
            int endMillis;
            String startDate;
            String endDate;
            if (index != -1)
              {
                startDate = startTime.substring(0, index);
                startMillis = parseTime(startTime.substring(index + 1));
              }
            else
              {
                startDate = startTime;
                // if time isn't given, default to 2:00:00 AM.
                startMillis = 2 * 60 * 60 * 1000;
              }
            index = endTime.indexOf('/');
            if (index != -1)
              {
                endDate = endTime.substring(0, index);
                endMillis = parseTime(endTime.substring(index + 1));
              }
            else
              {
                endDate = endTime;
                // if time isn't given, default to 2:00:00 AM.
                endMillis = 2 * 60 * 60 * 1000;
              }

            int[] start = getDateParams(startDate);
            int[] end = getDateParams(endDate);
            return new SimpleTimeZone(stdOffs, stdName, start[0], start[1],
                                      start[2], startMillis, end[0], end[1],
                                      end[2], endMillis, (dstOffs - stdOffs));
          }
      }

    // FIXME: Produce a warning here?
    catch (IndexOutOfBoundsException _)
      {
      }
    catch (NumberFormatException _)
      {
      }

    return null;
  }

  /**
   * Parses and returns the params for a POSIX TZ date field,
   * in the format int[]{ month, day, dayOfWeek }, following the
   * SimpleTimeZone constructor rules.
   */
  private static int[] getDateParams(String date)
  {
    int[] dayCount = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
    int month;

    if (date.charAt(0) == 'M' || date.charAt(0) == 'm')
      {
        int day;

        // Month, week of month, day of week

        // "Mm.w.d".  d is between 0 (Sunday) and 6.  Week w is
        // between 1 and 5; Week 1 is the first week in which day d
        // occurs and Week 5 specifies the last d day in the month.
        // Month m is between 1 and 12.

        month = Integer.parseInt(date.substring(1, date.indexOf('.')));
        int week = Integer.parseInt(date.substring(date.indexOf('.') + 1,
                                                   date.lastIndexOf('.')));
        int dayOfWeek = Integer.parseInt(date.substring(date.lastIndexOf('.')
                                                        + 1));
        dayOfWeek++; // Java day of week is one-based, Sunday is first day.

        if (week == 5)
          day = -1; // last day of month is -1 in java, 5 in TZ
        else
          {
            // First day of week starting on or after.  For example,
            // to specify the second Sunday of April, set month to
            // APRIL, day-of-month to 8, and day-of-week to -SUNDAY.
            day = (week - 1) * 7 + 1;
            dayOfWeek = -dayOfWeek;
          }

        month--; // Java month is zero-based.
        return new int[] { month, day, dayOfWeek };
      }

    // julian day, either zero-based 0<=n<=365 (incl feb 29)
    // or one-based 1<=n<=365 (no feb 29)
    int julianDay; // Julian day,

    if (date.charAt(0) != 'J' || date.charAt(0) != 'j')
      {
        julianDay = Integer.parseInt(date.substring(1));
        julianDay++; // make 1-based
        // Adjust day count to include feb 29.
        dayCount = new int[]
                   {
                     0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335
                   };
      }
    else
      // 1-based julian day
      julianDay = Integer.parseInt(date);

    int i = 11;
    while (i > 0)
      if (dayCount[i] < julianDay)
        break;
      else
        i--;
    julianDay -= dayCount[i];
    month = i;
    return new int[] { month, julianDay, 0 };
  }

  /**
   * Parses a time field hh[:mm[:ss]], returning the result
   * in milliseconds. No leading sign.
   */
  private static int parseTime(String time)
  {
    int millis = 0;
    int i = 0;

    while (i < time.length())
      if (time.charAt(i) == ':')
        break;
      else
        i++;
    millis = 60 * 60 * 1000 * Integer.parseInt(time.substring(0, i));
    if (i >= time.length())
      return millis;

    int iprev = ++i;
    while (i < time.length())
      if (time.charAt(i) == ':')
        break;
      else
        i++;
    millis += 60 * 1000 * Integer.parseInt(time.substring(iprev, i));
    if (i >= time.length())
      return millis;

    millis += 1000 * Integer.parseInt(time.substring(++i));
    return millis;
  }

  /**
   * Gets the time zone offset, for current date, modified in case of
   * daylight savings.  This is the offset to add to UTC to get the local
   * time.
   * @param era the era of the given date
   * @param year the year of the given date
   * @param month the month of the given date, 0 for January.
   * @param day the day of month
   * @param dayOfWeek the day of week
   * @param milliseconds the millis in the day (in local standard time)
   * @return the time zone offset in milliseconds.
   */
  public abstract int getOffset(int era, int year, int month,
                                int day, int dayOfWeek, int milliseconds);

  /**
   * Get the time zone offset for the specified date, modified in case of
   * daylight savings.  This is the offset to add to UTC to get the local
   * time.
   * @param date the date represented in millisecends
   * since January 1, 1970 00:00:00 GMT.
   * @since 1.4
   */
  public int getOffset(long date)
  {
    return (inDaylightTime(new Date(date))
            ? getRawOffset() + getDSTSavings()
            : getRawOffset());
  }

  /**
   * Gets the time zone offset, ignoring daylight savings.  This is
   * the offset to add to UTC to get the local time.
   * @return the time zone offset in milliseconds.
   */
  public abstract int getRawOffset();

  /**
   * Sets the time zone offset, ignoring daylight savings.  This is
   * the offset to add to UTC to get the local time.
   * @param offsetMillis the time zone offset to GMT.
   */
  public abstract void setRawOffset(int offsetMillis);

  /**
   * Gets the identifier of this time zone. For instance, PST for
   * Pacific Standard Time.
   * @returns the ID of this time zone.
   */
  public String getID()
  {
    return ID;
  }

  /**
   * Sets the identifier of this time zone. For instance, PST for
   * Pacific Standard Time.
   * @param id the new time zone ID.
   * @throws NullPointerException if <code>id</code> is <code>null</code>
   */
  public void setID(String id)
  {
    if (id == null)
      throw new NullPointerException();

    this.ID = id;
  }

  /**
   * This method returns a string name of the time zone suitable
   * for displaying to the user.  The string returned will be the long
   * description of the timezone in the current locale.  The name
   * displayed will assume daylight savings time is not in effect.
   *
   * @return The name of the time zone.
   */
  public final String getDisplayName()
  {
    return (getDisplayName(false, LONG, Locale.getDefault()));
  }

  /**
   * This method returns a string name of the time zone suitable
   * for displaying to the user.  The string returned will be the long
   * description of the timezone in the specified locale. The name
   * displayed will assume daylight savings time is not in effect.
   *
   * @param locale The locale for this timezone name.
   *
   * @return The name of the time zone.
   */
  public final String getDisplayName(Locale locale)
  {
    return (getDisplayName(false, LONG, locale));
  }

  /**
   * This method returns a string name of the time zone suitable
   * for displaying to the user.  The string returned will be of the
   * specified type in the current locale.
   *
   * @param dst Whether or not daylight savings time is in effect.
   * @param style <code>LONG</code> for a long name, <code>SHORT</code> for
   * a short abbreviation.
   *
   * @return The name of the time zone.
   */
  public final String getDisplayName(boolean dst, int style)
  {
    return (getDisplayName(dst, style, Locale.getDefault()));
  }


  /**
   * This method returns a string name of the time zone suitable
   * for displaying to the user.  The string returned will be of the
   * specified type in the specified locale.
   *
   * @param dst Whether or not daylight savings time is in effect.
   * @param style <code>LONG</code> for a long name, <code>SHORT</code> for
   * a short abbreviation.
   * @param locale The locale for this timezone name.
   *
   * @return The name of the time zone.
   */
  public String getDisplayName(boolean dst, int style, Locale locale)
  {
    DateFormatSymbols dfs;
    try
      {
        dfs = new DateFormatSymbols(locale);

        // The format of the value returned is defined by us.
        String[][]zoneinfo = dfs.getZoneStrings();
        for (int i = 0; i < zoneinfo.length; i++)
          {
            if (zoneinfo[i][0].equals(getID()))
              {
                if (!dst)
                  {
                    if (style == SHORT)
                      return (zoneinfo[i][2]);
                    else
                      return (zoneinfo[i][1]);
                  }
                else
                  {
                    if (style == SHORT)
                      return (zoneinfo[i][4]);
                    else
                      return (zoneinfo[i][3]);
                  }
              }
          }
      }
    catch (MissingResourceException e)
      {
      }

    return getDefaultDisplayName(dst);
  }

  private String getDefaultDisplayName(boolean dst)
  {
    int offset = getRawOffset() + (dst ? getDSTSavings() : 0);

    CPStringBuilder sb = new CPStringBuilder(9);
    sb.append("GMT");

    offset = offset / (1000 * 60);
    int hours = Math.abs(offset) / 60;
    int minutes = Math.abs(offset) % 60;

    if (minutes != 0 || hours != 0)
      {
        sb.append(offset >= 0 ? '+' : '-');
        sb.append((char) ('0' + hours / 10));
        sb.append((char) ('0' + hours % 10));
        sb.append(':');
        sb.append((char) ('0' + minutes / 10));
        sb.append((char) ('0' + minutes % 10));
      }

    return sb.toString();
  }

  /**
   * Returns true, if this time zone uses Daylight Savings Time.
   */
  public abstract boolean useDaylightTime();

  /**
   * Returns true, if the given date is in Daylight Savings Time in this
   * time zone.
   * @param date the given Date.
   */
  public abstract boolean inDaylightTime(Date date);

  /**
   * Gets the daylight savings offset.  This is a positive offset in
   * milliseconds with respect to standard time.  Typically this
   * is one hour, but for some time zones this may be half an our.
   * <p>The default implementation returns 3600000 milliseconds
   * (one hour) if the time zone uses daylight savings time
   * (as specified by {@link #useDaylightTime()}), otherwise
   * it returns 0.
   * @return the daylight savings offset in milliseconds.
   * @since 1.4
   */
  public int getDSTSavings ()
  {
    return useDaylightTime () ? 3600000 : 0;
  }

  /**
   * Gets the TimeZone for the given ID.
   * @param ID the time zone identifier.
   * @return The time zone for the identifier or GMT, if no such time
   * zone exists.
   */
  private static TimeZone getTimeZoneInternal(String ID)
  {
    // First check timezones hash
    TimeZone tz = null;
    TimeZone tznew = null;
    for (int pass = 0; pass < 2; pass++)
      {
        synchronized (TimeZone.class)
          {
            tz = timezones().get(ID);
            if (tz != null)
              {
                if (!tz.getID().equals(ID))
                  {
                    // We always return a timezone with the requested ID.
                    // This is the same behaviour as with JDK1.2.
                    tz = (TimeZone) tz.clone();
                    tz.setID(ID);
                    // We also save the alias, so that we return the same
                    // object again if getTimeZone is called with the same
                    // alias.
                    timezones().put(ID, tz);
                  }
                return tz;
              }
            else if (tznew != null)
              {
                timezones().put(ID, tznew);
                return tznew;
              }
          }

        if (pass == 1 || zoneinfo_dir == null)
          return null;

        // aliases0 is never changing after first timezones(), so should
        // be safe without synchronization.
        String zonename = aliases0.get(ID);
        if (zonename == null)
          zonename = ID;

        // Read the file outside of the critical section, it is expensive.
        tznew = ZoneInfo.readTZFile (ID, zoneinfo_dir
                                     + File.separatorChar + zonename);
        if (tznew == null)
          return null;
      }

    return null;
  }

  /**
   * Gets the TimeZone for the given ID.
   * @param ID the time zone identifier.
   * @return The time zone for the identifier or GMT, if no such time
   * zone exists.
   */
  public static TimeZone getTimeZone(String ID)
  {
    // Check for custom IDs first
    if (ID.startsWith("GMT") && ID.length() > 3)
      {
        int pos = 3;
        int offset_direction = 1;

        if (ID.charAt(pos) == '-')
          {
            offset_direction = -1;
            pos++;
          }
        else if (ID.charAt(pos) == '+')
          {
            pos++;
          }

        try
          {
            int hour, minute;

            String offset_str = ID.substring(pos);
            int idx = offset_str.indexOf(":");
            if (idx != -1)
              {
                hour = Integer.parseInt(offset_str.substring(0, idx));
                minute = Integer.parseInt(offset_str.substring(idx + 1));
              }
            else
              {
                int offset_length = offset_str.length();
                if (offset_length <= 2)
                  {
                    // Only hour
                    hour = Integer.parseInt(offset_str);
                    minute = 0;
                  }
                else
                  {
                    // hour and minute, not separated by colon
                    hour = Integer.parseInt
                      (offset_str.substring(0, offset_length - 2));
                    minute = Integer.parseInt
                      (offset_str.substring(offset_length - 2));
                  }
              }

            // Custom IDs have to be normalized
            CPStringBuilder sb = new CPStringBuilder(9);
            sb.append("GMT");

            sb.append(offset_direction >= 0 ? '+' : '-');
            sb.append((char) ('0' + hour / 10));
            sb.append((char) ('0' + hour % 10));
            sb.append(':');
            sb.append((char) ('0' + minute / 10));
            sb.append((char) ('0' + minute % 10));
            ID = sb.toString();

            return new SimpleTimeZone((hour * (60 * 60 * 1000)
                                       + minute * (60 * 1000))
                                      * offset_direction, ID);
          }
        catch (NumberFormatException e)
          {
          }
      }

    TimeZone tz = getTimeZoneInternal(ID);
    if (tz != null)
      return tz;

    return new SimpleTimeZone(0, "GMT");
  }

  /**
   * Gets the available IDs according to the given time zone
   * offset.
   * @param rawOffset the given time zone GMT offset.
   * @return An array of IDs, where the time zone has the specified GMT
   * offset. For example <code>{"Phoenix", "Denver"}</code>, since both have
   * GMT-07:00, but differ in daylight savings behaviour.
   */
  public static String[] getAvailableIDs(int rawOffset)
  {
    synchronized (TimeZone.class)
      {
        HashMap<String,TimeZone> h = timezones();
        int count = 0;
        if (zoneinfo_dir == null)
          {
            Iterator<Map.Entry<String,TimeZone>> iter = h.entrySet().iterator();
            while (iter.hasNext())
              {
                // Don't iterate the values, since we want to count
                // doubled values (aliases)
                Map.Entry<String,TimeZone> entry = iter.next();
                if (entry.getValue().getRawOffset() == rawOffset)
                  count++;
              }

            String[] ids = new String[count];
            count = 0;
            iter = h.entrySet().iterator();
            while (iter.hasNext())
              {
                Map.Entry<String,TimeZone> entry = iter.next();
                if (entry.getValue().getRawOffset() == rawOffset)
                  ids[count++] = (String) entry.getKey();
              }
            return ids;
          }
      }

    String[] s = getAvailableIDs();
    int count = 0;
    for (int i = 0; i < s.length; i++)
      {
        TimeZone t = getTimeZoneInternal(s[i]);
        if (t == null || t.getRawOffset() != rawOffset)
          s[i] = null;
        else
          count++;
      }
    String[] ids = new String[count];
    count = 0;
    for (int i = 0; i < s.length; i++)
    if (s[i] != null)
      ids[count++] = s[i];

    return ids;
  }

  private static int getAvailableIDs(File d, String prefix, ArrayList<String[]> list)
    {
      String[] files = d.list();
      int count = files.length;
      boolean top = prefix.length() == 0;
      list.add (files);
      for (int i = 0; i < files.length; i++)
        {
          if (top
              && (files[i].equals("posix")
                  || files[i].equals("right")
                  || files[i].endsWith(".tab")
                  || aliases0.get(files[i]) != null))
            {
              files[i] = null;
              count--;
              continue;
            }

          File f = new File(d, files[i]);
          if (f.isDirectory())
            {
              count += getAvailableIDs(f, prefix + files[i]
                                       + File.separatorChar, list) - 1;
              files[i] = null;
            }
          else
            files[i] = prefix + files[i];
        }
      return count;
    }

  /**
   * Gets all available IDs.
   * @return An array of all supported IDs.
   */
  public static String[] getAvailableIDs()
  {
    synchronized (TimeZone.class)
      {
        HashMap<String,TimeZone> h = timezones();
        if (zoneinfo_dir == null)
          return h.keySet().toArray(new String[h.size()]);

        if (availableIDs != null)
          {
            String[] ids = new String[availableIDs.length];
            for (int i = 0; i < availableIDs.length; i++)
              ids[i] = availableIDs[i];
            return ids;
          }

        File d = new File(zoneinfo_dir);
        ArrayList<String[]> list = new ArrayList<String[]>(30);
        int count = getAvailableIDs(d, "", list) + aliases0.size();
        availableIDs = new String[count];
        String[] ids = new String[count];

        count = 0;
        for (int i = 0; i < list.size(); i++)
          {
            String[] s = list.get(i);
            for (int j = 0; j < s.length; j++)
              if (s[j] != null)
                {
                  availableIDs[count] = s[j];
                  ids[count++] = s[j];
                }
          }

        Iterator<Map.Entry<String,String>> iter = aliases0.entrySet().iterator();
        while (iter.hasNext())
          {
            Map.Entry<String,String> entry = iter.next();
            availableIDs[count] = entry.getKey();
            ids[count++] = entry.getKey();
          }

        return ids;
      }
  }

  /**
   * Returns the time zone under which the host is running.  This
   * can be changed with setDefault.
   *
   * @return A clone of the current default time zone for this host.
   * @see #setDefault
   */
  public static TimeZone getDefault()
  {
    return (TimeZone) defaultZone().clone();
  }

  public static void setDefault(TimeZone zone)
  {
    // Hmmmm. No Security checks?
    defaultZone0 = zone;
  }

  /**
   * Test if the other time zone uses the same rule and only
   * possibly differs in ID.  This implementation for this particular
   * class will return true if the raw offsets are identical.  Subclasses
   * should override this method if they use daylight savings.
   * @return true if this zone has the same raw offset
   */
  public boolean hasSameRules(TimeZone other)
  {
    return other.getRawOffset() == getRawOffset();
  }

  /**
   * Returns a clone of this object.  I can't imagine, why this is
   * useful for a time zone.
   */
  public Object clone()
  {
    try
      {
        return super.clone();
      }
    catch (CloneNotSupportedException ex)
      {
        return null;
      }
  }
}
