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