12d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// © 2016 and later: Unicode, Inc. and others.
22d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
3bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/*
4bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @(#)TimeZone.java    1.51 00/01/19
5bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
687255a3fc79cc94374b5b8adc76a86e251ac7d3eFredrik Roubert * Copyright (C) 1996-2016, International Business Machines
7bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Corporation and others.  All Rights Reserved.
8bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */
9bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
10bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertpackage com.ibm.icu.util;
11bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
12bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.io.Serializable;
13bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.util.Date;
14bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.util.GregorianCalendar;
15bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.util.Locale;
16bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.util.SimpleTimeZone;
17bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
18bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.util.ULocale.Category;
19bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
20bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/**
21bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * {@icuenhanced java.util.TimeZone}.{@icu _usage_}
22bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
23bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p><code>TimeZone</code> represents a time zone offset, and also computes daylight
24bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * savings.
25bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
26bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>Typically, you get a <code>TimeZone</code> using {@link #getDefault()}
27bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * which creates a <code>TimeZone</code> based on the time zone where the program
28bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * is running. For example, for a program running in Japan, <code>getDefault</code>
29bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * creates a <code>TimeZone</code> object based on Japanese Standard Time.
30bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
31bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>You can also get a <code>TimeZone</code> using {@link #getTimeZone(String)}
32bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * along with a time zone ID. For instance, the time zone ID for the
33bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * U.S. Pacific Time zone is "America/Los_Angeles". So, you can get a
34bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * U.S. Pacific Time <code>TimeZone</code> object with:
35bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
36bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <blockquote>
37bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre>
38bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
39bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre>
40bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </blockquote>
41bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * You can use the {@link #getAvailableIDs()} method to iterate through
42bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * all the supported time zone IDs. You can then choose a
43bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * supported ID to get a <code>TimeZone</code>.
44bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * If the time zone you want is not represented by one of the
45bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * supported IDs, then you can create a custom time zone ID with
46bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * the following syntax:
47bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
48bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <blockquote>
49bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre>
50bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * GMT[+|-]hh[[:]mm]
51bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre>
52bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </blockquote>
53bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
54bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * For example, you might specify GMT+14:00 as a custom
55bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * time zone ID.  The <code>TimeZone</code> that is returned
56bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * when you specify a custom time zone ID does not include
57bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * daylight savings time.
58bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
59bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>For compatibility with JDK 1.1.x, some other three-letter time zone IDs
60bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * (such as "PST", "CTT", "AST") are also supported. However, <strong>their
61bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * use is deprecated</strong> because the same abbreviation is often used
62bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * for multiple time zones (for example, "CST" could be U.S. "Central Standard
63bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Time" and "China Standard Time"), and the Java platform can then only
64bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * recognize one of them.
65bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
66bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p><strong>Note:</strong> Starting from ICU4J 4.0, you can optionally choose
67bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * JDK <code>TimeZone</code> as the time zone implementation.  The TimeZone factory
68bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * method <code>getTimeZone</code> creates an instance of ICU's own <code>TimeZone</code>
69bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * subclass by default.  If you want to use the JDK implementation always, you can
70bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * set the default time zone implementation type by the new method
71bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <code>setDefaultTimeZoneType</code>.  Alternatively, you can change the initial
72bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * default implementation type by setting a property below.
73bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
74bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <blockquote>
75bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre>
76bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * #
77bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * # The default TimeZone implementation type used by the ICU TimeZone
78bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * # factory method. [ ICU | JDK ]
79bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * #
80bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * com.ibm.icu.util.TimeZone.DefaultTimeZoneType = ICU
81bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre>
82bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </blockquote>
83bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
84bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>This property is included in ICUConfig.properties in com.ibm.icu package.  When the
85bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <code>TimeZone</code> class is loaded, the initialization code checks if the property
86bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <code>com.ibm.icu.util.TimeZone.DefaultTimeZoneType=xxx</code> is defined by the system
87bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * properties.  If not available, then it loads ICUConfig.properties to get the default
88bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * time zone implementation type.  The property setting is only used for the initial
89bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * default value and you can change the default type by calling
90bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <code>setDefaultTimeZoneType</code> at runtime.
91bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
92bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @see          Calendar
93bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @see          GregorianCalendar
94bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @see          SimpleTimeZone
9587255a3fc79cc94374b5b8adc76a86e251ac7d3eFredrik Roubert * @author       Mark Davis, Deborah Goldsmith, Chen-Lieh Huang, Alan Liu
96bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0
97bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */
98bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertpublic class TimeZone implements Serializable, Cloneable, Freezable<TimeZone> {
99bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    private static final long serialVersionUID = 1L;
100bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
101bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
102bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @internal
103bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
104bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final java.util.TimeZone timeZone;
105bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
106bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
107bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @internal
108bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param delegate the TimeZone to which to delegate
109bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
110bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public TimeZone(java.util.TimeZone delegate) {
111bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        this.timeZone = delegate;
112bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
113bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
114bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
115bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} A logger for TimeZone. Will be null if logging is not on by way of system
116bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * property: "icu4j.debug.logging"
117bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @draft ICU 4.4
118bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @provisional This API might change or be removed in a future release.
119bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
120bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static ICULogger TimeZoneLogger = ICULogger.getICULogger(TimeZone.class.getName());
121bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
122bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
123bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Default constructor.  (For invocation by subclass constructors,
124bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * typically implicit.)
125bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.8
126bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
127bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public TimeZone() {
128bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        this.timeZone = java.util.TimeZone.getDefault();
129bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
130bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
131bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
132bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} A time zone implementation type indicating ICU's own TimeZone used by
133bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>getTimeZone</code>, <code>setDefaultTimeZoneType</code>
134bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * and <code>getDefaultTimeZoneType</code>.
135bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
136bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
137bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int TIMEZONE_ICU = 0;
138bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
139bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} A time zone implementation type indicating JDK TimeZone used by
140bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>getTimeZone</code>, <code>setDefaultTimeZoneType</code>
141bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * and <code>getDefaultTimeZoneType</code>.
142bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
143bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
144bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int TIMEZONE_JDK = 1;
145bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
146bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
147bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * A style specifier for <code>getDisplayName()</code> indicating
148bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * a short name, such as "PST."
149bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see #LONG
150bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
151bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
152bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int SHORT = 0;
153bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
154bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
155bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * A style specifier for <code>getDisplayName()</code> indicating
156bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * a long name, such as "Pacific Standard Time."
157bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see #SHORT
158bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
159bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
160bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int LONG  = 1;
161bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
162bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
163bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} A style specifier for <code>getDisplayName()</code> indicating
164bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * a short generic name, such as "PT."
165bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @see #LONG_GENERIC
166bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @draft ICU 4.4
167bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @provisional This API might change or be removed in a future release.
168bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
169bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static final int SHORT_GENERIC = 2;
170bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//
171bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
172bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} A style specifier for <code>getDisplayName()</code> indicating
173bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * a long generic name, such as "Pacific Time."
174bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @see #SHORT_GENERIC
175bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @draft ICU 4.4
176bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @provisional This API might change or be removed in a future release.
177bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
178bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static final int LONG_GENERIC = 3;
179bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//
180bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
181bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} A style specifier for <code>getDisplayName()</code> indicating
182bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * a short name derived from the timezone's offset, such as "-0800."
183bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @see #LONG_GMT
184bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @draft ICU 4.4
185bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @provisional This API might change or be removed in a future release.
186bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
187bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static final int SHORT_GMT = 4;
188bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//
189bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
190bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} A style specifier for <code>getDisplayName()</code> indicating
191bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * a long name derived from the timezone's offset, such as "GMT-08:00."
192bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @see #SHORT_GMT
193bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @draft ICU 4.4
194bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @provisional This API might change or be removed in a future release.
195bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
196bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static final int LONG_GMT = 5;
197bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//
198bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
199bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} A style specifier for <code>getDisplayName()</code> indicating
200bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * a short name derived from the timezone's short standard or daylight
201bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * timezone name ignoring commonlyUsed, such as "PDT."
202bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @draft ICU 4.4
203bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @provisional This API might change or be removed in a future release.
204bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
205bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//
206bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static final int SHORT_COMMONLY_USED = 6;
207bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//
208bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
209bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} A style specifier for <code>getDisplayName()</code> indicating
210bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * a long name derived from the timezone's fallback name, such as
211bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * "United States (Los Angeles)."
212bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @draft ICU 4.4
213bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @provisional This API might change or be removed in a future release.
214bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
215bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static final int GENERIC_LOCATION = 7;
216bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//
217bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
218bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * Gets the time zone offset, for current date, modified in case of
219bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * daylight savings. This is the offset to add *to* UTC to get local time.
220bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param era the era of the given date.
221bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param year the year in the given date.
222bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param month the month in the given date.
223bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * Month is 0-based. e.g., 0 for January.
224bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param day the day-in-month of the given date.
225bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param dayOfWeek the day-of-week of the given date.
226bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param milliseconds the millis in day in <em>standard</em> local time.
227bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @return the offset to add *to* GMT to get local time.
228bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 2.0
229bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
230bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
231bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
232bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} System time zone type constants used by filtering zones in
233bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@link TimeZone#getAvailableIDs(SystemTimeZoneType, String, Integer)}
234bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
235bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @draft ICU 4.8
236bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @provisional This API might change or be removed in a future release.
237bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
238bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public enum SystemTimeZoneType {
239bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        /**
240bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * Any system zones.
241bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * @draft ICU 4.8
242bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * @provisional This API might change or be removed in a future release.
243bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         */
244bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        ANY,
245bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//
246bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        /**
247bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * Canonical system zones.
248bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * @draft ICU 4.8
249bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * @provisional This API might change or be removed in a future release.
250bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         */
251bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        CANONICAL,
252bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//
253bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        /**
254bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * Canonical system zones associated with actual locations.
255bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * @draft ICU 4.8
256bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * @provisional This API might change or be removed in a future release.
257bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         */
258bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        CANONICAL_LOCATION,
259bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
260bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
261bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public int getOffset(int era, int year, int month, int day,
262bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                                  int dayOfWeek, int milliseconds) {
263bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return timeZone.getOffset(era, year, month, day, dayOfWeek, milliseconds);
264bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
265bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
266bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
267bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
268bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the offset of this time zone from UTC at the specified
269bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * date. If Daylight Saving Time is in effect at the specified
270bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * date, the offset value is adjusted with the amount of daylight
271bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * saving.
272bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
273bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param date the date represented in milliseconds since January 1, 1970 00:00:00 GMT
274bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the amount of time in milliseconds to add to UTC to get local time.
275bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
276bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see Calendar#ZONE_OFFSET
277bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see Calendar#DST_OFFSET
278bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see #getOffset(long, boolean, int[])
279bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.8
280bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
281bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public int getOffset(long date) {
282bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return timeZone.getOffset(date);
283bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
284bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
285bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
286bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * Returns the time zone raw and GMT offset for the given moment
287bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * in time.  Upon return, local-millis = GMT-millis + rawOffset +
288bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * dstOffset.  All computations are performed in the proleptic
289bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * Gregorian calendar.  The default implementation in the TimeZone
290bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * class delegates to the 8-argument getOffset().
291bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
292bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param date moment in time for which to return offsets, in
293bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * units of milliseconds from January 1, 1970 0:00 GMT, either GMT
294bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * time or local wall time, depending on `local'.
295bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param local if true, `date' is local wall time; otherwise it
296bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * is in GMT time.
297bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param offsets output parameter to receive the raw offset, that
298bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * is, the offset not including DST adjustments, in offsets[0],
299bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * and the DST offset, that is, the offset to be added to
300bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * `rawOffset' to obtain the total offset between local and GMT
301bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * time, in offsets[1]. If DST is not in effect, the DST offset is
302bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * zero; otherwise it is a positive value, typically one hour.
303bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
304bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 2.8
305bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
306bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public void getOffset(long date, boolean local, int[] offsets) {
307bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base");
308bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
309bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
310bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
311bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Sets the base time zone offset to GMT.
312bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * This is the offset to add *to* UTC to get local time.
313bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param offsetMillis the given base time zone offset to GMT.
314bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
315bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
316bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public void setRawOffset(int offsetMillis) {
317bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (isFrozen) {
318bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            throw new UnsupportedOperationException("Attempt to modify a frozen TimeZone instance.");
319bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
320bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        timeZone.setRawOffset(offsetMillis);
321bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
322bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
323bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
324bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Gets unmodified offset, NOT modified in case of daylight savings.
325bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * This is the offset to add *to* UTC to get local time.
326bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the unmodified offset to add *to* UTC to get local time.
327bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
328bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
329bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public int getRawOffset() {
330bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return timeZone.getRawOffset();
331bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
332bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
333bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
334bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Gets the ID of this time zone.
335bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the ID of this time zone.
336bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
337bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
338bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public String getID() {
339bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return timeZone.getID();
340bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
341bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
342bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
343bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Sets the time zone ID. This does not change any other data in
344bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the time zone object.
345bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param ID the new time zone ID.
346bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
347bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
348bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public void setID(String ID) {
349bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (isFrozen) {
350bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            throw new UnsupportedOperationException("Attempt to modify a frozen TimeZone instance.");
351bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
352bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        timeZone.setID(ID);
353bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
354bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
355bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
356bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns a name of this time zone suitable for presentation to the user
357bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * in the default locale.
358bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * This method returns the long generic name.
359bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * If the display name is not available for the locale,
360bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * a fallback based on the country, city, or time zone id will be used.
361bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the human-readable name of this time zone in the default locale.
362bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
363bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
364bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final String getDisplayName() {
365bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return timeZone.getDisplayName(ULocale.getDefault(Category.DISPLAY).toLocale());
366bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
367bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
368bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
369bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns a name of this time zone suitable for presentation to the user
370bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * in the specified locale.
371bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * This method returns the long generic name.
372bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * If the display name is not available for the locale,
373bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * a fallback based on the country, city, or time zone id will be used.
374bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param locale the locale in which to supply the display name.
375bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the human-readable name of this time zone in the given locale
376bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * or in the default locale if the given locale is not recognized.
377bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
378bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
379bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final String getDisplayName(Locale locale) {
380bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return timeZone.getDisplayName(locale);
381bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
382bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
383bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
384bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns a name of this time zone suitable for presentation to the user
385bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * in the specified locale.
386bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * This method returns the long name, not including daylight savings.
387bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * If the display name is not available for the locale,
388bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * a fallback based on the country, city, or time zone id will be used.
389bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param locale the ulocale in which to supply the display name.
390bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the human-readable name of this time zone in the given locale
391bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * or in the default ulocale if the given ulocale is not recognized.
392bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.2
393bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
394bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final String getDisplayName(ULocale locale) {
395bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return timeZone.getDisplayName(locale.toLocale());
396bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
397bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
398bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
399bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns a name of this time zone suitable for presentation to the user
400bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * in the default locale.
401bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * If the display name is not available for the locale,
402bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * then this method returns a string in the format
403bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>GMT[+-]hh:mm</code>.
404bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param daylight if true, return the daylight savings name.
405bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param style the output style of the display name.  Valid styles are
406bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>SHORT</code>, <code>LONG</code>, <code>SHORT_GENERIC</code>,
407bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>LONG_GENERIC</code>, <code>SHORT_GMT</code>, <code>LONG_GMT</code>,
408bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>SHORT_COMMONLY_USED</code> or <code>GENERIC_LOCATION</code>.
409bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the human-readable name of this time zone in the default locale.
410bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
411bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
412bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final String getDisplayName(boolean daylight, int style) {
413bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return getDisplayName(daylight, style, ULocale.getDefault(Category.DISPLAY));
414bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
415bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
416bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
417bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns a name of this time zone suitable for presentation to the user
418bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * in the specified locale.
419bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * If the display name is not available for the locale,
420bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * then this method returns a string in the format
421bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>GMT[+-]hh:mm</code>.
422bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param daylight if true, return the daylight savings name.
423bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param style the output style of the display name.  Valid styles are
424bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>SHORT</code>, <code>LONG</code>, <code>SHORT_GENERIC</code>,
425bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>LONG_GENERIC</code>, <code>SHORT_GMT</code>, <code>LONG_GMT</code>,
426bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>SHORT_COMMONLY_USED</code> or <code>GENERIC_LOCATION</code>.
427bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param locale the locale in which to supply the display name.
428bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the human-readable name of this time zone in the given locale
429bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * or in the default locale if the given locale is not recognized.
430bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @exception IllegalArgumentException style is invalid.
431bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
432bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
433bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public String getDisplayName(boolean daylight, int style, Locale locale) {
434bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return getDisplayName(daylight, style, ULocale.forLocale(locale));
435bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
436bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
437bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
438bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns a name of this time zone suitable for presentation to the user
439bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * in the specified locale.
440bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * If the display name is not available for the locale,
441bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * then this method returns a string in the format
442bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>GMT[+-]hh:mm</code>.
443bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param daylight if true, return the daylight savings name.
444bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param style the output style of the display name.  Valid styles are
445bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>SHORT</code>, <code>LONG</code>, <code>SHORT_GENERIC</code>,
446bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>LONG_GENERIC</code>, <code>SHORT_GMT</code>, <code>LONG_GMT</code>,
447bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>SHORT_COMMONLY_USED</code> or <code>GENERIC_LOCATION</code>.
448bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param locale the locale in which to supply the display name.
449bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the human-readable name of this time zone in the given locale
450bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * or in the default locale if the given locale is not recognized.
451bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @exception IllegalArgumentException style is invalid.
452bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.2
453bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
454bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public String getDisplayName(boolean daylight, int style, ULocale locale) {
455bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (style == SHORT) {
456bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return timeZone.getDisplayName(daylight, java.util.TimeZone.SHORT, locale.toLocale());
457bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        } else if (style == LONG) {
458bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return timeZone.getDisplayName(daylight, java.util.TimeZone.LONG, locale.toLocale());
459bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        } else {
460bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            throw new UnsupportedOperationException("Specified time zone format style is not supported by com.ibm.icu.base");
461bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
462bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
463bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
464bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
465bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the amount of time to be added to local standard time
466bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * to get local wall clock time.
467bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>
468bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * The default implementation always returns 3600000 milliseconds
469bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * (i.e., one hour) if this time zone observes Daylight Saving
470bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Time. Otherwise, 0 (zero) is returned.
471bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>
472bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * If an underlying TimeZone implementation subclass supports
473bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * historical Daylight Saving Time changes, this method returns
474bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the known latest daylight saving value.
475bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
476bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the amount of saving time in milliseconds
477bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.8
478bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
479bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public int getDSTSavings() {
480bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return timeZone.getDSTSavings();
481bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
482bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
483bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
484bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Queries if this time zone uses daylight savings time.
485bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return true if this time zone uses daylight savings time,
486bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * false, otherwise.
487bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
488bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
489bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public boolean useDaylightTime() {
490bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return timeZone.useDaylightTime();
491bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
492bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
493bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
494bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * Queries if this time zone is in daylight saving time or will observe
495bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * daylight saving time at any future time.
496bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <p>The default implementation in this class returns <code>true</code> if {@link #useDaylightTime()}
497bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * or {@link #inDaylightTime(Date) inDaylightTime(new Date())} returns <code>true</code>.
498bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <p>
499bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <strong>Note:</strong> This method was added for JDK compatibility support.
500bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * The JDK's <code>useDaylightTime()</code> only checks the last known rule(s), therefore
501bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * it may return false even the zone observes daylight saving time currently. JDK added
502bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <code>observesDaylightTime()</code> to resolve the issue. In ICU, {@link #useDaylightTime()}
503bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * works differently. The ICU implementation checks if the zone uses daylight saving time
504bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * in the current calendar year. Therefore, it will never return <code>false</code> if
505bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * daylight saving time is currently used.
506bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <p>
507bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * ICU's TimeZone subclass implementations override this method to support the same behavior
508bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * with JDK's <code>observesDaylightSavingTime()</code>. Unlike {@link #useDaylightTime()},
509bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * the implementation does not take past daylight saving time into account, so
510bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * that this method may return <code>false</code> even when {@link #useDaylightTime()} returns
511bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <code>true</code>.
512bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
513bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @return <code>true</code> if this time zone is in daylight saving time or will observe
514bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * daylight saving time at any future time.
515bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @see #useDaylightTime
516bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 49
517bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
518bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public boolean observesDaylightTime() {
519bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supproted by com.ibm.icu.base");
520bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
521bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
522bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
523bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Queries if the given date is in daylight savings time in
524bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * this time zone.
525bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param date the given Date.
526bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return true if the given date is in daylight savings time,
527bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * false, otherwise.
528bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
529bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
530bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public boolean inDaylightTime(Date date) {
531bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return timeZone.inDaylightTime(date);
532bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
533bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
534bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
535bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Gets the <code>TimeZone</code> for the given ID.
536bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
537bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param ID the ID for a <code>TimeZone</code>, such as "America/Los_Angeles",
538bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * or a custom ID such as "GMT-8:00". Note that the support of abbreviations,
539bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * such as "PST", is for JDK 1.1.x compatibility only and full names should be used.
540bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
541bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the specified <code>TimeZone</code>, or the GMT zone if the given ID
542bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * cannot be understood.
543bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
544bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
545bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static synchronized TimeZone getTimeZone(String ID) {
546bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new TimeZone(java.util.TimeZone.getTimeZone(ID));
547bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
548bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
549bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
550bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Gets the <code>TimeZone</code> for the given ID. The instance of <code>TimeZone</code>
551bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * returned by this method is immutable. Any methods mutate the instance({@link #setID(String)},
552bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@link #setRawOffset(int)}) will throw <code>UnsupportedOperationException</code> upon its
553bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * invocation.
554bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
555bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param ID the ID for a <code>TimeZone</code>, such as "America/Los_Angeles",
556bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * or a custom ID such as "GMT-8:00". Note that the support of abbreviations,
557bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * such as "PST", is for JDK 1.1.x compatibility only and full names should be used.
558bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
559bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the specified <code>TimeZone</code>, or the UNKNOWN_ZONE
560bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * if the given ID cannot be understood.
561bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see #UNKNOWN_ZONE
562bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 49
563bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
564bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
565bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static TimeZone getFrozenTimeZone(String ID) {
566bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return getTimeZone(ID).freeze();
567bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
568bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
569bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
570bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Gets the <code>TimeZone</code> for the given ID and the timezone type.
571bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param ID the ID for a <code>TimeZone</code>, such as "America/Los_Angeles", or a
572bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * custom ID such as "GMT-8:00". Note that the support of abbreviations, such as
573bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * "PST", is for JDK 1.1.x compatibility only and full names should be used.
574bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param type Time zone type, either <code>TIMEZONE_ICU</code> or
575bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>TIMEZONE_JDK</code>.
576bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the specified <code>TimeZone</code>, or the GMT zone if the given ID
577bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * cannot be understood.
578bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
579bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
580bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static synchronized TimeZone getTimeZone(String ID, int type) {
581bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (type == TIMEZONE_JDK) {
582bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return new TimeZone(java.util.TimeZone.getTimeZone(ID));
583bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
584bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        throw new UnsupportedOperationException("TIMEZONE_ICU not supported by com.ibm.icu.base");
585bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
586bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
587bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
588bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Sets the default time zone type used by <code>getTimeZone</code>.
589bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param type time zone type, either <code>TIMEZONE_ICU</code> or
590bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>TIMEZONE_JDK</code>.
591bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
592bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
593bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static synchronized void setDefaultTimeZoneType(int type) {
594bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (type != TIMEZONE_JDK) {
595bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            throw new UnsupportedOperationException("TimeZone type other than TIMEZONE_JDK is not supported by com.ibm.icu.base");
596bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
597bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
598bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
599bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
600bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Returns the default time zone type currently used.
601bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return The default time zone type, either <code>TIMEZONE_ICU</code> or
602bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>TIMEZONE_JDK</code>.
603bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
604bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
605bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static int getDefaultTimeZoneType() {
606bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return TIMEZONE_JDK;
607bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
608bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
609bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
610bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} Returns a set of time zone ID strings with the given filter conditions.
611bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <p><b>Note:</b>A <code>Set</code> returned by this method is
612bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * immutable.
613bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param zoneType      The system time zone type.
614bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param region        The ISO 3166 two-letter country code or UN M.49 three-digit area code.
615bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *                      When null, no filtering done by region.
616bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param rawOffset     An offset from GMT in milliseconds, ignoring the effect of daylight savings
617bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *                      time, if any. When null, no filtering done by zone offset.
618bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @return an immutable set of system time zone IDs.
619bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @see SystemTimeZoneType
620bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
621bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @draft ICU 4.8
622bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @provisional This API might change or be removed in a future release.
623bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
624bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static Set<String> getAvailableIDs(SystemTimeZoneType zoneType,
625bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//            String region, Integer rawOffset) {
626bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base");
627bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
628bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
629bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
630bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Return a new String array containing all system TimeZone IDs
631bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * with the given raw offset from GMT.  These IDs may be passed to
632bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>get()</code> to construct the corresponding TimeZone
633bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * object.
634bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param rawOffset the offset in milliseconds from GMT
635bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return an array of IDs for system TimeZones with the given
636bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * raw offset.  If there are none, return a zero-length array.
637bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
638bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
639bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static String[] getAvailableIDs(int rawOffset) {
640bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return java.util.TimeZone.getAvailableIDs(rawOffset);
641bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
642bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
643bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
644bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
645bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
646bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * Return a new String array containing all system TimeZone IDs
647bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * associated with the given country.  These IDs may be passed to
648bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <code>get()</code> to construct the corresponding TimeZone
649bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * object.
650bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param country a two-letter ISO 3166 country code, or <code>null</code>
651bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * to return zones not associated with any country
652bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @return an array of IDs for system TimeZones in the given
653bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * country.  If there are none, return a zero-length array.
654bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 2.0
655bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
656bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static String[] getAvailableIDs(String country) {
657bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base");
658bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
659bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
660bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
661bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Return a new String array containing all system TimeZone IDs.
662bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * These IDs (and only these IDs) may be passed to
663bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <code>get()</code> to construct the corresponding TimeZone
664bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * object.
665bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return an array of all system TimeZone IDs
666bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
667bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
668bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static String[] getAvailableIDs() {
669bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return java.util.TimeZone.getAvailableIDs();
670bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
671bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
672bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
673bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} Returns the number of IDs in the equivalency group that
674bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * includes the given ID.  An equivalency group contains zones
675bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * that have the same GMT offset and rules.
676bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
677bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <p>The returned count includes the given ID; it is always >= 1
678bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * for valid IDs.  The given ID must be a system time zone.  If it
679bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * is not, returns zero.
680bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param id a system time zone ID
681bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @return the number of zones in the equivalency group containing
682bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * 'id', or zero if 'id' is not a valid system ID
683bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @see #getEquivalentID
684bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 2.0
685bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
686bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static int countEquivalentIDs(String id) {
687bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base");
688bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
689bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
690bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
691bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * Returns an ID in the equivalency group that
692bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * includes the given ID.  An equivalency group contains zones
693bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * that have the same GMT offset and rules.
694bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
695bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <p>The given index must be in the range 0..n-1, where n is the
696bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * value returned by <code>countEquivalentIDs(id)</code>.  For
697bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * some value of 'index', the returned value will be equal to the
698bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * given id.  If the given id is not a valid system time zone, or
699bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * if 'index' is out of range, then returns an empty string.
700bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param id a system time zone ID
701bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param index a value from 0 to n-1, where n is the value
702bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * returned by <code>countEquivalentIDs(id)</code>
703bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @return the ID of the index-th zone in the equivalency group
704bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * containing 'id', or an empty string if 'id' is not a valid
705bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * system ID or 'index' is out of range
706bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @see #countEquivalentIDs
707bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 2.0
708bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
709bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static String getEquivalentID(String id, int index) {
710bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base");
711bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
712bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
713bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
714bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Gets the default <code>TimeZone</code> for this host.
715bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * The source of the default <code>TimeZone</code>
716bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * may vary with implementation.
717bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return a default <code>TimeZone</code>.
718bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
719bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
720bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static TimeZone getDefault() {
721bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new TimeZone(java.util.TimeZone.getDefault());
722bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
723bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
724bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
725bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Sets the <code>TimeZone</code> that is
726bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * returned by the <code>getDefault</code> method.  If <code>zone</code>
727bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * is null, reset the default to the value it had originally when the
728bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * VM first started.
729bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param tz the new default time zone
730bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
731bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
732bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static void setDefault(TimeZone tz) {
733bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        java.util.TimeZone.setDefault(tz.timeZone);
734bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
735bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
736bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
737bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns true if this zone has the same rule and offset as another zone.
738bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * That is, if this zone differs only in ID, if at all.  Returns false
739bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * if the other zone is null.
740bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param other the <code>TimeZone</code> object to be compared with
741bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return true if the other zone is not null and is the same as this one,
742bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * with the possible exception of the ID
743bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
744bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
745bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public boolean hasSameRules(TimeZone other) {
746bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return timeZone.hasSameRules(other.timeZone);
747bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
748bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
749bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
750bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Overrides clone.
751bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
752bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
753bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public Object clone() {
754bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new TimeZone((java.util.TimeZone)timeZone.clone());
755bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
756bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
757bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
758bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Overrides equals.
759bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.6
760bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
761bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public boolean equals(Object obj){
762bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        try {
763bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return timeZone.equals(((TimeZone)obj).timeZone);
764bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        } catch (Exception e) {
765bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return false;
766bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
767bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
768bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
769bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
770bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Overrides hashCode.
771bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.6
772bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
773bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public int hashCode(){
774bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return timeZone.hashCode();
775bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
776bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
777bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
778bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} Returns the time zone data version currently used by ICU.
779bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
780bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @return the version string, such as "2007f"
781bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @throws MissingResourceException if ICU time zone resource bundle
782bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * is missing or the version information is not available.
783bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
784bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 3.8
785bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
786bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static synchronized String getTZDataVersion() {
787bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supproted by com.ibm.icu.base");
788bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
789bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
790bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
791bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} Returns the canonical system time zone ID or the normalized
792bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * custom time zone ID for the given time zone ID.
793bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param id The input time zone ID to be canonicalized.
794bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @return The canonical system time zone ID or the custom time zone ID
795bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * in normalized format for the given time zone ID.  When the given time zone ID
796bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * is neither a known system time zone ID nor a valid custom time zone ID,
797bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * null is returned.
798bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 4.0
799bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
800bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static String getCanonicalID(String id) {
801bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supproted by com.ibm.icu.base");
802bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
803bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
804bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
805bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} Returns the canonical system time zone ID or the normalized
806bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * custom time zone ID for the given time zone ID.
807bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param id The input time zone ID to be canonicalized.
808bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param isSystemID When non-null boolean array is specified and
809bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * the given ID is a known system time zone ID, true is set to <code>isSystemID[0]</code>
810bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @return The canonical system time zone ID or the custom time zone ID
811bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * in normalized format for the given time zone ID.  When the given time zone ID
812bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * is neither a known system time zone ID nor a valid custom time zone ID,
813bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * null is returned.
814bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 4.0
815bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
816bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static String getCanonicalID(String id, boolean[] isSystemID) {
817bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supproted by com.ibm.icu.base");
818bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
819bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
820bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
821bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} Returns the region code associated with the given
822bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * system time zone ID. The region code is either ISO 3166
823bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * 2-letter country code or UN M.49 3-digit area code.
824bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * When the time zone is not associated with a specific location,
825bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * for example - "Etc/UTC", "EST5EDT", then this method returns
826bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * "001" (UN M.49 area code for World).
827bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param id the system time zone ID.
828bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @return the region code associated with the given
829bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * system time zone ID.
830bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @throws IllegalArgumentException if <code>id</code> is not a known system ID.
831bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @see #getAvailableIDs(String)
832bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
833bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @draft ICU 4.8
834bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @provisional This API might change or be removed in a future release.
835bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
836bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public static String getRegion(String id) {
837bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    	throw new UnsupportedOperationException("Method not supproted by com.ibm.icu.base");
838bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
839bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
840bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    private transient boolean isFrozen = false;
841bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
842bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
843bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@inheritDoc}
844bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 49
845bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
846bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
847bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public boolean isFrozen() {
848bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return isFrozen;
849bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
850bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
851bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
852bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@inheritDoc}
853bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 49
854bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
855bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
856bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public TimeZone freeze() {
857bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        isFrozen = true;
858bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return this;
859bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
860bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
861bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
862bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@inheritDoc}
863bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 49
864bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
865bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
866bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public TimeZone cloneAsThawed() {
867bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        try {
868bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            TimeZone other = (TimeZone) super.clone();
869bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            other.isFrozen = false;
870bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return other;
871bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        } catch (CloneNotSupportedException e) {
872bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            throw new RuntimeException(e);
873bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
874bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
875bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
876bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert}
877bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
878bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//eof
879