This is the mail archive of the
java-patches@sources.redhat.com
mailing list for the Java project.
Re: PATCH: PR 1411 Remove natTimeZone.cc (proposal)
- To: Tom Tromey <tromey at redhat dot com>, Java Patch List <java-patches at sources dot redhat dot com>
- Subject: Re: PATCH: PR 1411 Remove natTimeZone.cc (proposal)
- From: Warren Levy <warrenl at redhat dot com>
- Date: Mon, 8 Jan 2001 23:06:25 -0800 (PST)
- cc: bryce at albatross dot co dot nz
On 31 Dec 2000, Tom Tromey wrote:
> I haven't read up on the issues involved. My only comment is on
> something in the patch that confused me.
...
> So here the code is casting a `jchar*' to a `char*' and returning it.
> This is wrong, it suffers from encoding confusion.
Argh, I have no idea what I was thinking ;-). This was obviously broken.
> If synchronization of this code with Classpath is required, you might
> want to find a way to write more of it in Java. JNI is really
> horrible to write; the idea of rewriting getDefaultTimeZoneId using
> JNI makes me shudder.
Me too ;-). I went the route of rewriting it in Java. I put the parallel
version of the the Claspath JNI code (from java.util.Timezone) into
java.lang.System as CNI code and wrote the rest of my stuff as java code
in java.lang.System. Currently, System is not merged between the two
projects so I have to leave the JNI native code in Classpath's Timezone.
I'll note this in the Classpath code with a comment in java.util.Timezone;
I've already added a note in libgcj's java.lang.System for the benefit of
whoever does the merge.
Anyway, this version is cleaner and actually works right (AFAIK ;-).
I still don't care for the way the OS timezone string is generated (as a
form like PST8PDT) since it is not one of the standard timezones. But, at
least now, it gets translated into a standard name. I'm checking this in.
Enjoy!
--warrenl
2001-01-08 Warren Levy <warrenl@redhat.com>
Fix for PR libgcj/1411:
* Makefile.am: Removed java/util/natTimeZone.cc.
* Makefile.in: Rebuilt.
* gnu/gcj/text/LocaleData_en_US.java (zoneStringsDefault): Added
missing localized timezone names.
* java/lang/System.java (getDefaultTimeZoneId): New private method.
* java/lang/natSystem.cc (getSystemTimeZone): New private method.
(init_properties): Set user.timezone property.
* java/text/DateFormatSymbols.java (zoneStringsDefault): Added
default timezone names; removed non-standard ones. Use standard
ID names per JCL.
* java/util/Date.java (toGMTString): Removed zoneGMT variable.
(UTC): Ditto.
* java/util/TimeZone.java: Add standard ID names per JCL; removed
non-standard ones.
(getDefaultTimeZoneId): Removed.
(zoneGMT): Removed.
(getDefaultTimeZoneId): Removed.
* java/util/natTimeZone.cc: Removed.
Index: Makefile.am
===================================================================
RCS file: /cvs/gcc/egcs/libjava/Makefile.am,v
retrieving revision 1.125
diff -u -p -r1.125 Makefile.am
--- Makefile.am 2001/01/08 22:55:15 1.125
+++ Makefile.am 2001/01/09 06:57:24
@@ -1260,7 +1260,6 @@ java/net/natPlainDatagramSocketImpl.cc \
java/net/natPlainSocketImpl.cc \
java/text/natCollator.cc \
java/util/natGregorianCalendar.cc \
-java/util/natTimeZone.cc \
java/util/zip/natDeflater.cc \
java/util/zip/natInflater.cc
Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/egcs/libjava/Makefile.in,v
retrieving revision 1.134
diff -u -p -r1.134 Makefile.in
--- Makefile.in 2001/01/08 22:55:15 1.134
+++ Makefile.in 2001/01/09 06:57:24
@@ -1020,7 +1020,6 @@ java/net/natPlainDatagramSocketImpl.cc \
java/net/natPlainSocketImpl.cc \
java/text/natCollator.cc \
java/util/natGregorianCalendar.cc \
-java/util/natTimeZone.cc \
java/util/zip/natDeflater.cc \
java/util/zip/natInflater.cc
@@ -1172,8 +1171,8 @@ java/lang/reflect/natArray.lo java/lang/
java/lang/reflect/natField.lo java/lang/reflect/natMethod.lo \
java/net/natInetAddress.lo java/net/natPlainDatagramSocketImpl.lo \
java/net/natPlainSocketImpl.lo java/text/natCollator.lo \
-java/util/natGregorianCalendar.lo java/util/natTimeZone.lo \
-java/util/zip/natDeflater.lo java/util/zip/natInflater.lo
+java/util/natGregorianCalendar.lo java/util/zip/natDeflater.lo \
+java/util/zip/natInflater.lo
libgcjx_la_OBJECTS = gnu/gcj/xlib/natClip.lo \
gnu/gcj/xlib/natColormap.lo gnu/gcj/xlib/natDisplay.lo \
gnu/gcj/xlib/natDrawable.lo gnu/gcj/xlib/natFont.lo \
Index: gnu/gcj/text/LocaleData_en_US.java
===================================================================
RCS file: /cvs/gcc/egcs/libjava/gnu/gcj/text/LocaleData_en_US.java,v
retrieving revision 1.3
diff -u -p -r1.3 LocaleData_en_US.java
--- LocaleData_en_US.java 2000/03/07 19:55:25 1.3
+++ LocaleData_en_US.java 2001/01/09 06:57:24
@@ -21,6 +21,8 @@ public final class LocaleData_en_US exte
{
// These are for DateFormatSymbols.
static String[][] zoneStringsDefault = {
+ { "GMT", "Greenwich Mean Time", "GMT",
+ /**/ "Greenwich Mean Time", "GMT", "GMT" },
{ "PST", "Pacific Standard Time", "PST",
/**/ "Pacific Daylight Time", "PDT", "San Francisco" },
{ "MST", "Mountain Standard Time", "MST",
@@ -35,10 +37,18 @@ public final class LocaleData_en_US exte
/**/ "Eastern Standard Time", "EST", "Indianapolis" },
{ "PRT", "Atlantic Standard Time", "AST",
/**/ "Atlantic Daylight Time", "ADT", "Halifax" },
+ { "CNT", "Newfoundland Standard Time", "NST",
+ /**/ "Newfoundland Daylight Time", "NDT", "St. Johns" },
+ { "ECT", "Central European Standard Time", "CET",
+ /**/ "Central European Daylight Time", "CEST", "Paris" },
+ { "CTT", "China Standard Time", "CST",
+ /**/ "China Standard Time", "CST", "Shanghai" },
+ { "JST", "Japan Standard Time", "JST",
+ /**/ "Japan Standard Time", "JST", "Tokyo" },
{ "HST", "Hawaii Standard Time", "HST",
- /**/ "Hawaii Daylight Time", "HDT", "Honolulu" },
- { "AST", "Alaska Standard Time", "AST",
- /**/ "Alaska Daylight Time", "ADT", "Anchorage" }
+ /**/ "Hawaii Standard Time", "HST", "Honolulu" },
+ { "AST", "Alaska Standard Time", "AKST",
+ /**/ "Alaska Daylight Time", "AKDT", "Anchorage" }
};
private static final Object[][] contents =
Index: java/lang/System.java
===================================================================
RCS file: /cvs/gcc/egcs/libjava/java/lang/System.java,v
retrieving revision 1.6
diff -u -p -r1.6 System.java
--- System.java 2000/12/28 05:55:56 1.6
+++ System.java 2001/01/09 06:57:24
@@ -1,6 +1,6 @@
// System.java - System-specific info.
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation
This file is part of libgcj.
@@ -20,6 +20,7 @@ import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.util.Properties;
import java.util.PropertyPermission;
+import java.util.TimeZone;
/**
* @author Tom Tromey <tromey@cygnus.com>
@@ -40,6 +41,83 @@ public final class System
int count);
public static native long currentTimeMillis ();
+
+ // FIXME: When merging with Classpath, remember to remove the call to
+ // getDefaultTimeZoneId from java.util.Timezone.
+ private static native String getSystemTimeZone ();
+
+ // Get the System Timezone as reported by the OS. It should be in
+ // the form PST8PDT so we'll need to parse it and check that it's valid.
+ // The result is used to set the user.timezone property in init_properties.
+ // FIXME: Using the code from Classpath for generating the System
+ // Timezone IMO is suboptimal because it ignores whether the rules for
+ // DST match up.
+ private static String getDefaultTimeZoneId ()
+ {
+ String sysTimeZoneId = getSystemTimeZone ();
+
+ // Check if this is a valid timezone. Make sure the IDs match
+ // since getTimeZone returns GMT if no match is found.
+ TimeZone tz = TimeZone.getTimeZone (sysTimeZoneId);
+ if (tz.getID ().equals (sysTimeZoneId))
+ return sysTimeZoneId;
+
+ // Check if the base part of sysTimeZoneId is a valid timezone that
+ // matches with daylight usage and rawOffset. Make sure the IDs match
+ // since getTimeZone returns GMT if no match is found.
+ // First find start of GMT offset info and any Daylight zone name.
+ int startGMToffset = 0;
+ int sysTimeZoneIdLength = sysTimeZoneId.length();
+ for (int i = 0; i < sysTimeZoneIdLength && startGMToffset == 0; i++)
+ {
+ if (Character.isDigit (sysTimeZoneId.charAt (i)))
+ startGMToffset = i;
+ }
+
+ int startDaylightZoneName = 0;
+ boolean usesDaylight = false;
+ for (int i = sysTimeZoneIdLength - 1;
+ i >= 0 && !Character.isDigit (sysTimeZoneId.charAt (i)); --i)
+ {
+ startDaylightZoneName = i;
+ }
+ if (startDaylightZoneName > 0)
+ usesDaylight = true;
+
+ int GMToffset = Integer.parseInt (startDaylightZoneName == 0 ?
+ sysTimeZoneId.substring (startGMToffset) :
+ sysTimeZoneId.substring (startGMToffset, startDaylightZoneName));
+
+ // Offset could be in hours or seconds. Convert to millis.
+ if (GMToffset < 24)
+ GMToffset *= 60 * 60;
+ GMToffset *= -1000;
+
+ String tzBasename = sysTimeZoneId.substring (0, startGMToffset);
+ tz = TimeZone.getTimeZone (tzBasename);
+ if (tz.getID ().equals (tzBasename) && tz.getRawOffset () == GMToffset)
+ {
+ boolean tzUsesDaylight = tz.useDaylightTime ();
+ if (usesDaylight && tzUsesDaylight || !usesDaylight && !tzUsesDaylight)
+ return tzBasename;
+ }
+
+ // If no match, see if a valid timezone has the same attributes as this
+ // and then use it instead.
+ String[] IDs = TimeZone.getAvailableIDs (GMToffset);
+ for (int i = 0; i < IDs.length; ++i)
+ {
+ // FIXME: The daylight savings rules may not match the rules
+ // for the desired zone.
+ boolean IDusesDaylight =
+ TimeZone.getTimeZone (IDs[i]).useDaylightTime ();
+ if (usesDaylight && IDusesDaylight || !usesDaylight && !IDusesDaylight)
+ return IDs[i];
+ }
+
+ // If all else fails, return null.
+ return null;
+ }
public static void exit (int status)
{
Index: java/lang/natSystem.cc
===================================================================
RCS file: /cvs/gcc/egcs/libjava/java/lang/natSystem.cc,v
retrieving revision 1.31
diff -u -p -r1.31 natSystem.cc
--- natSystem.cc 2000/11/29 04:53:37 1.31
+++ natSystem.cc 2001/01/09 06:57:24
@@ -1,6 +1,6 @@
// natSystem.cc - Native code implementing System class.
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation
This file is part of libgcj.
@@ -10,6 +10,7 @@ details. */
#include <config.h>
+#include <stdio.h>
#include <string.h>
#include <stdlib.h>
@@ -28,6 +29,17 @@ details. */
#include <langinfo.h>
#endif
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
#include <gcj/cni.h>
#include <jvm.h>
#include <java-props.h>
@@ -38,6 +50,7 @@ details. */
#include <java/lang/NullPointerException.h>
#include <java/lang/StringBuffer.h>
#include <java/util/Properties.h>
+#include <java/util/TimeZone.h>
#include <java/io/PrintStream.h>
#include <java/io/InputStream.h>
@@ -214,6 +227,50 @@ getpwuid_adaptor(T_passwd * (*getpwuid_r
}
#endif
+/*
+ * This method returns a time zone string that is used by init_properties
+ * to set the default timezone property 'user.timezone'. That value is
+ * used by default as a key into the timezone table used by the
+ * java::util::TimeZone class.
+ */
+jstring
+java::lang::System::getSystemTimeZone (void)
+{
+ time_t current_time;
+ char **tzinfo, *tzid;
+ long tzoffset;
+
+ current_time = time(0);
+
+ mktime(localtime(¤t_time));
+ tzinfo = tzname;
+ tzoffset = timezone;
+
+ if ((tzoffset % 3600) == 0)
+ tzoffset = tzoffset / 3600;
+
+ if (!strcmp(tzinfo[0], tzinfo[1]))
+ {
+ tzid = (char*) _Jv_Malloc (strlen(tzinfo[0]) + 6);
+ if (!tzid)
+ return NULL;
+
+ sprintf(tzid, "%s%ld", tzinfo[0], tzoffset);
+ }
+ else
+ {
+ tzid = (char*) _Jv_Malloc (strlen(tzinfo[0]) + strlen(tzinfo[1]) + 6);
+ if (!tzid)
+ return NULL;
+
+ sprintf(tzid, "%s%ld%s", tzinfo[0], tzoffset, tzinfo[1]);
+ }
+
+ jstring retval = JvNewStringUTF (tzid);
+ _Jv_Free (tzid);
+ return retval;
+}
+
void
java::lang::System::init_properties (void)
{
@@ -363,6 +420,11 @@ java::lang::System::init_properties (voi
{
SET ("user.language", "en");
}
+
+ // Set the "user.timezone" property.
+ jstring timezone = getDefaultTimeZoneId ();
+ if (timezone != NULL)
+ newprops->put (JvNewStringLatin1 ("user.timezone"), timezone);
// Set some properties according to whatever was compiled in with
// `-D'.
Index: java/text/DateFormatSymbols.java
===================================================================
RCS file: /cvs/gcc/egcs/libjava/java/text/DateFormatSymbols.java,v
retrieving revision 1.8
diff -u -p -r1.8 DateFormatSymbols.java
--- DateFormatSymbols.java 2000/12/06 21:14:14 1.8
+++ DateFormatSymbols.java 2001/01/09 06:57:24
@@ -81,24 +81,18 @@ public class DateFormatSymbols extends O
/**/ "Eastern Standard Time", "EST", "Indianapolis" },
{ "PRT", "Atlantic Standard Time", "AST",
/**/ "Atlantic Daylight Time", "ADT", "Halifax" },
+ { "CNT", "Newfoundland Standard Time", "NST",
+ /**/ "Newfoundland Daylight Time", "NDT", "St. Johns" },
+ { "ECT", "Central European Standard Time", "CET",
+ /**/ "Central European Daylight Time", "CEST", "Paris" },
+ { "CTT", "China Standard Time", "CST",
+ /**/ "China Standard Time", "CST", "Shanghai" },
+ { "JST", "Japan Standard Time", "JST",
+ /**/ "Japan Standard Time", "JST", "Tokyo" },
{ "HST", "Hawaii Standard Time", "HST",
- /**/ "Hawaii Daylight Time", "HDT", "Honolulu" },
- { "AST", "Alaska Standard Time", "AST",
- /**/ "Alaska Daylight Time", "ADT", "Anchorage" },
- { "PST8PDT", "Pacific Standard Time", "PST",
- /******/ "Pacific Daylight Time", "PDT", "San Francisco" },
- { "MST7MDT", "Mountain Standard Time", "MST",
- /******/ "Mountain Daylight Time", "MDT", "Denver" },
- { "CST6CDT", "Central Standard Time", "CST",
- /******/ "Central Daylight Time", "CDT", "Chicago" },
- { "EST5EDT", "Eastern Standard Time", "EST",
- /******/ "Eastern Daylight Time", "EDT", "Boston" },
- { "AST4ADT", "Atlantic Standard Time", "AST",
- /******/ "Atlantic Daylight Time", "ADT", "Halifax" },
- { "HST10HDT", "Hawaii Standard Time", "HST",
- /*******/ "Hawaii Daylight Time", "HDT", "Honolulu" },
- { "AST9ADT", "Alaska Standard Time", "AKST",
- /******/ "Alaska Daylight Time", "AKDT", "Anchorage" }
+ /**/ "Hawaii Standard Time", "HST", "Honolulu" },
+ { "AST", "Alaska Standard Time", "AKST",
+ /**/ "Alaska Daylight Time", "AKDT", "Anchorage" }
};
// These are each arrays with a value for SHORT, MEDIUM, LONG, FULL,
Index: java/util/Date.java
===================================================================
RCS file: /cvs/gcc/egcs/libjava/java/util/Date.java,v
retrieving revision 1.5
diff -u -p -r1.5 Date.java
--- Date.java 2000/10/05 23:57:16 1.5
+++ Date.java 2001/01/09 06:57:24
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation
This file is part of libgcj.
@@ -461,7 +461,7 @@ public class Date implements java.io.Ser
// This method is deprecated. We don't care if it is very slow.
SimpleDateFormat fmt = new SimpleDateFormat ("d MMM yyyy HH:mm:ss 'GMT'",
Locale.US);
- fmt.setTimeZone(TimeZone.zoneGMT);
+ fmt.setTimeZone(TimeZone.getTimeZone("GMT"));
return fmt.format(this);
}
@@ -476,7 +476,7 @@ public class Date implements java.io.Ser
public static long UTC (int year, int month, int date,
int hours, int minutes, int seconds)
{
- GregorianCalendar cal = new GregorianCalendar (TimeZone.zoneGMT);
+ GregorianCalendar cal = new GregorianCalendar (TimeZone.getTimeZone("GMT"));
cal.set(year+1900, month, date, hours, minutes, seconds);
return cal.getTimeInMillis();
}
Index: java/util/TimeZone.java
===================================================================
RCS file: /cvs/gcc/egcs/libjava/java/util/TimeZone.java,v
retrieving revision 1.9
diff -u -p -r1.9 TimeZone.java
--- TimeZone.java 2000/12/28 05:55:56 1.9
+++ TimeZone.java 2001/01/09 06:57:24
@@ -1,5 +1,5 @@
/* java.util.TimeZone
- Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -82,7 +82,8 @@ public abstract class TimeZone implement
TimeZone tz;
// Automatically generated by scripts/timezones.pl
// XXX - Should we read this data from a file?
- tz = new SimpleTimeZone(-11000 * 3600, "Pacific/Niue");
+ tz = new SimpleTimeZone(-11000 * 3600, "MIT");
+ timezones.put("MIT", tz);
timezones.put("Pacific/Niue", tz);
timezones.put("Pacific/Apia", tz);
timezones.put("Pacific/Midway", tz);
@@ -100,9 +101,10 @@ public abstract class TimeZone implement
timezones.put("Pacific/Rarotonga", tz);
timezones.put("Pacific/Tahiti", tz);
tz = new SimpleTimeZone
- (-9000 * 3600, "America/Juneau",
+ (-9000 * 3600, "AST",
Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
+ timezones.put("AST", tz);
timezones.put("America/Juneau", tz);
timezones.put("America/Anchorage", tz);
timezones.put("America/Nome", tz);
@@ -112,10 +114,10 @@ public abstract class TimeZone implement
tz = new SimpleTimeZone(-8500 * 3600, "Pacific/Marquesas");
timezones.put("Pacific/Marquesas", tz);
tz = new SimpleTimeZone
- (-8000 * 3600, "PST8PDT",
+ (-8000 * 3600, "PST",
Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
- timezones.put("PST8PDT", tz);
+ timezones.put("PST", tz);
timezones.put("America/Dawson", tz);
timezones.put("America/Los_Angeles", tz);
timezones.put("America/Tijuana", tz);
@@ -124,15 +126,15 @@ public abstract class TimeZone implement
timezones.put("US/Pacific-New", tz);
tz = new SimpleTimeZone(-8000 * 3600, "Pacific/Pitcairn");
timezones.put("Pacific/Pitcairn", tz);
- tz = new SimpleTimeZone(-7000 * 3600, "MST");
- timezones.put("MST", tz);
+ tz = new SimpleTimeZone(-7000 * 3600, "PNT");
+ timezones.put("PNT", tz);
timezones.put("America/Dawson_Creek", tz);
timezones.put("America/Phoenix", tz);
tz = new SimpleTimeZone
- (-7000 * 3600, "MST7MDT",
+ (-7000 * 3600, "MST",
Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
- timezones.put("MST7MDT", tz);
+ timezones.put("MST", tz);
timezones.put("America/Boise", tz);
timezones.put("America/Chihuahua", tz);
timezones.put("America/Denver", tz);
@@ -152,10 +154,10 @@ public abstract class TimeZone implement
timezones.put("America/Tegucigalpa", tz);
timezones.put("Pacific/Galapagos", tz);
tz = new SimpleTimeZone
- (-6000 * 3600, "CST6CDT",
+ (-6000 * 3600, "CST",
Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
- timezones.put("CST6CDT", tz);
+ timezones.put("CST", tz);
timezones.put("America/Cambridge_Bay", tz);
timezones.put("America/Cancun", tz);
timezones.put("America/Chicago", tz);
@@ -181,8 +183,8 @@ public abstract class TimeZone implement
Calendar.APRIL, 1, 0, 0 * 3600,
Calendar.OCTOBER, -1, Calendar.SUNDAY, 0 * 3600);
timezones.put("America/Havana", tz);
- tz = new SimpleTimeZone(-5000 * 3600, "EST");
- timezones.put("EST", tz);
+ tz = new SimpleTimeZone(-5000 * 3600, "IET");
+ timezones.put("IET", tz);
timezones.put("America/Bogota", tz);
timezones.put("America/Cayman", tz);
timezones.put("America/Guayaquil", tz);
@@ -197,10 +199,10 @@ public abstract class TimeZone implement
timezones.put("America/Port-au-Prince", tz);
timezones.put("America/Porto_Acre", tz);
tz = new SimpleTimeZone
- (-5000 * 3600, "EST5EDT",
+ (-5000 * 3600, "EST",
Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
- timezones.put("EST5EDT", tz);
+ timezones.put("EST", tz);
timezones.put("America/Detroit", tz);
timezones.put("America/Louisville", tz);
timezones.put("America/Montreal", tz);
@@ -208,7 +210,8 @@ public abstract class TimeZone implement
timezones.put("America/New_York", tz);
timezones.put("America/Nipigon", tz);
timezones.put("America/Thunder_Bay", tz);
- tz = new SimpleTimeZone(-4000 * 3600, "America/Anguilla");
+ tz = new SimpleTimeZone(-4000 * 3600, "PRT");
+ timezones.put("PRT", tz);
timezones.put("America/Anguilla", tz);
timezones.put("America/Antigua", tz);
timezones.put("America/Aruba", tz);
@@ -259,7 +262,8 @@ public abstract class TimeZone implement
Calendar.SEPTEMBER, 2, Calendar.SUNDAY, 0 * 3600,
Calendar.APRIL, 16, -Calendar.SUNDAY, 0 * 3600);
timezones.put("Atlantic/Stanley", tz);
- tz = new SimpleTimeZone(-3000 * 3600, "America/Buenos_Aires");
+ tz = new SimpleTimeZone(-3000 * 3600, "AGT");
+ timezones.put("AGT", tz);
timezones.put("America/Buenos_Aires", tz);
timezones.put("America/Belem", tz);
timezones.put("America/Catamarca", tz);
@@ -289,9 +293,10 @@ public abstract class TimeZone implement
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
timezones.put("America/Miquelon", tz);
tz = new SimpleTimeZone
- (-2500 * 3600, "America/St_Johns",
+ (-3500 * 3600, "CNT",
Calendar.APRIL, 1, Calendar.SUNDAY, 2000 * 3600,
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
+ timezones.put("CNT", tz);
timezones.put("America/St_Johns", tz);
tz = new SimpleTimeZone(-2000 * 3600, "America/Noronha");
timezones.put("America/Noronha", tz);
@@ -362,6 +367,7 @@ public abstract class TimeZone implement
Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
timezones.put("CET", tz);
+ timezones.put("ECT", tz);
timezones.put("Africa/Ceuta", tz);
timezones.put("Arctic/Longyearbyen", tz);
timezones.put("Europe/Amsterdam", tz);
@@ -399,7 +405,9 @@ public abstract class TimeZone implement
Calendar.APRIL, -1, Calendar.FRIDAY, 0 * 3600,
Calendar.SEPTEMBER, -1, Calendar.THURSDAY, 23000 * 3600);
timezones.put("Africa/Cairo", tz);
- tz = new SimpleTimeZone(2000 * 3600, "Africa/Gaborone");
+ timezones.put("ART", tz);
+ tz = new SimpleTimeZone(2000 * 3600, "CAT");
+ timezones.put("CAT", tz);
timezones.put("Africa/Gaborone", tz);
timezones.put("Africa/Blantyre", tz);
timezones.put("Africa/Bujumbura", tz);
@@ -470,7 +478,8 @@ public abstract class TimeZone implement
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
timezones.put("Europe/Tiraspol", tz);
timezones.put("Europe/Moscow", tz);
- tz = new SimpleTimeZone(3000 * 3600, "Indian/Comoro");
+ tz = new SimpleTimeZone(3000 * 3600, "EAT");
+ timezones.put("EAT", tz);
timezones.put("Indian/Comoro", tz);
timezones.put("Africa/Addis_Ababa", tz);
timezones.put("Africa/Asmera", tz);
@@ -506,7 +515,8 @@ public abstract class TimeZone implement
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
timezones.put("Asia/Yerevan", tz);
timezones.put("Europe/Samara", tz);
- tz = new SimpleTimeZone(4000 * 3600, "Indian/Mauritius");
+ tz = new SimpleTimeZone(4000 * 3600, "NET");
+ timezones.put("NET", tz);
timezones.put("Indian/Mauritius", tz);
timezones.put("Asia/Dubai", tz);
timezones.put("Asia/Muscat", tz);
@@ -529,7 +539,8 @@ public abstract class TimeZone implement
Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
timezones.put("Asia/Yekaterinburg", tz);
- tz = new SimpleTimeZone(5000 * 3600, "Indian/Kerguelen");
+ tz = new SimpleTimeZone(5000 * 3600, "PLT");
+ timezones.put("PLT", tz);
timezones.put("Indian/Kerguelen", tz);
timezones.put("Asia/Ashkhabad", tz);
timezones.put("Asia/Dushanbe", tz);
@@ -538,11 +549,13 @@ public abstract class TimeZone implement
timezones.put("Asia/Tashkent", tz);
timezones.put("Indian/Chagos", tz);
timezones.put("Indian/Maldives", tz);
- tz = new SimpleTimeZone(5500 * 3600, "Asia/Calcutta");
+ tz = new SimpleTimeZone(5500 * 3600, "IST");
+ timezones.put("IST", tz);
timezones.put("Asia/Calcutta", tz);
tz = new SimpleTimeZone(5750 * 3600, "Asia/Katmandu");
timezones.put("Asia/Katmandu", tz);
- tz = new SimpleTimeZone(6000 * 3600, "Antarctica/Mawson");
+ tz = new SimpleTimeZone(6000 * 3600, "BST");
+ timezones.put("BST", tz);
timezones.put("Antarctica/Mawson", tz);
timezones.put("Asia/Colombo", tz);
timezones.put("Asia/Dacca", tz);
@@ -561,7 +574,8 @@ public abstract class TimeZone implement
tz = new SimpleTimeZone(6500 * 3600, "Asia/Rangoon");
timezones.put("Asia/Rangoon", tz);
timezones.put("Indian/Cocos", tz);
- tz = new SimpleTimeZone(7000 * 3600, "Antarctica/Davis");
+ tz = new SimpleTimeZone(7000 * 3600, "VST");
+ timezones.put("VST", tz);
timezones.put("Antarctica/Davis", tz);
timezones.put("Asia/Bangkok", tz);
timezones.put("Asia/Jakarta", tz);
@@ -574,7 +588,8 @@ public abstract class TimeZone implement
Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
timezones.put("Asia/Krasnoyarsk", tz);
- tz = new SimpleTimeZone(8000 * 3600, "Antarctica/Casey");
+ tz = new SimpleTimeZone(8000 * 3600, "CTT");
+ timezones.put("CTT", tz);
timezones.put("Antarctica/Casey", tz);
timezones.put("Asia/Brunei", tz);
timezones.put("Asia/Chungking", tz);
@@ -602,7 +617,8 @@ public abstract class TimeZone implement
Calendar.MARCH, -1, Calendar.SUNDAY, 0 * 3600,
Calendar.SEPTEMBER, -1, Calendar.SUNDAY, 0 * 3600);
timezones.put("Asia/Ulan_Bator", tz);
- tz = new SimpleTimeZone(9000 * 3600, "Asia/Jayapura");
+ tz = new SimpleTimeZone(9000 * 3600, "JST");
+ timezones.put("JST", tz);
timezones.put("Asia/Jayapura", tz);
timezones.put("Asia/Pyongyang", tz);
timezones.put("Asia/Seoul", tz);
@@ -619,7 +635,8 @@ public abstract class TimeZone implement
Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600);
timezones.put("Australia/Adelaide", tz);
timezones.put("Australia/Broken_Hill", tz);
- tz = new SimpleTimeZone(9500 * 3600, "Australia/Darwin");
+ tz = new SimpleTimeZone(9500 * 3600, "ACT");
+ timezones.put("ACT", tz);
timezones.put("Australia/Darwin", tz);
tz = new SimpleTimeZone(10000 * 3600, "Antarctica/DumontDUrville");
timezones.put("Antarctica/DumontDUrville", tz);
@@ -646,6 +663,7 @@ public abstract class TimeZone implement
Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600);
timezones.put("Australia/Melbourne", tz);
timezones.put("Australia/Sydney", tz);
+ timezones.put("AET", tz);
tz = new SimpleTimeZone
(10500 * 3600, "Australia/Lord_Howe",
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600,
@@ -656,7 +674,8 @@ public abstract class TimeZone implement
Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
Calendar.OCTOBER, -1, Calendar.SUNDAY, 2000 * 3600);
timezones.put("Asia/Magadan", tz);
- tz = new SimpleTimeZone(11000 * 3600, "Pacific/Ponape");
+ tz = new SimpleTimeZone(11000 * 3600, "SST");
+ timezones.put("SST", tz);
timezones.put("Pacific/Ponape", tz);
timezones.put("Pacific/Efate", tz);
timezones.put("Pacific/Guadalcanal", tz);
@@ -671,6 +690,7 @@ public abstract class TimeZone implement
timezones.put("Antarctica/McMurdo", tz);
timezones.put("Antarctica/South_Pole", tz);
timezones.put("Pacific/Auckland", tz);
+ timezones.put("NST", tz);
tz = new SimpleTimeZone
(12000 * 3600, "Asia/Kamchatka",
Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600,
@@ -715,25 +735,11 @@ public abstract class TimeZone implement
String tzid = System.getProperty("user.timezone");
if (tzid == null)
- tzid = getDefaultTimeZoneId();
-
- if (tzid == null)
tzid = "GMT";
defaultZone = getTimeZone(tzid);
}
- /* This method returns us a time zone id string which is in the
- form <standard zone name><GMT offset><daylight time zone name>.
- The GMT offset is in seconds, except where it is evenly divisible
- by 3600, then it is in hours. If the zone does not observe
- daylight time, then the daylight zone name is omitted. Examples:
- in Chicago, the timezone would be CST6CDT. In Indianapolis
- (which does not have Daylight Savings Time) the string would
- be EST5
- */
- private static native String getDefaultTimeZoneId();
-
/**
* Gets the time zone offset, for current date, modified in case of
* daylight savings. This is the offset to add to UTC to get the local
@@ -1087,6 +1093,4 @@ public abstract class TimeZone implement
return null;
}
}
-
- static final TimeZone zoneGMT = new SimpleTimeZone(0, "GMT");
}