[multiple changes]

2001-05-10  Tom Tromey  <tromey@redhat.com>

	* java/util/GregorianCalendar.java: Imported from Classpath.
	* gnu/java/locale/LocaleInformation_nl.java: New file from
	Classpath.
	* gnu/java/locale/LocaleInformation_en.java: Likewise.
	* gnu/java/locale/LocaleInformation_de.java: Likewise.
	* gnu/java/locale/LocaleInformation.java: Likewise.
	* natGregorianCalendar.cc: Removed.
	* Makefile.in: Rebuilt.
	* Makefile.am (nat_source_files): Removed
	natGregorianCalendar.cc.

2001-05-10  Tom Tromey  <tromey@redhat.com>

	* java/text/SimpleDateFormat.java (computeCenturyStart): New
	method.
	(defaultCenturyStart): Use it.
	(readObject): Likewise.
	(SimpleDateFormat): Clear the calendar.  Set the grouping on the
	number format.
	(parse): Copy the calendar before modifying it.  Correctly handle
	the time zone.

	* java/util/Calendar.java (clear): Set field value(s) to 0.

2001-05-10  Jeff Sturm  <jsturm@one-point.com>

	* Calendar.java (get): Clear areFieldsSet if requested field
	is not set.
	(set): Unset fields that depend on new value.

From-SVN: r41942
This commit is contained in:
Tom Tromey 2001-05-10 18:13:17 +00:00
parent b0089a92a3
commit 9622762678
11 changed files with 2101 additions and 415 deletions

View File

@ -1,3 +1,35 @@
2001-05-10 Tom Tromey <tromey@redhat.com>
* java/util/GregorianCalendar.java: Imported from Classpath.
* gnu/java/locale/LocaleInformation_nl.java: New file from
Classpath.
* gnu/java/locale/LocaleInformation_en.java: Likewise.
* gnu/java/locale/LocaleInformation_de.java: Likewise.
* gnu/java/locale/LocaleInformation.java: Likewise.
* natGregorianCalendar.cc: Removed.
* Makefile.in: Rebuilt.
* Makefile.am (nat_source_files): Removed
natGregorianCalendar.cc.
2001-05-10 Tom Tromey <tromey@redhat.com>
* java/text/SimpleDateFormat.java (computeCenturyStart): New
method.
(defaultCenturyStart): Use it.
(readObject): Likewise.
(SimpleDateFormat): Clear the calendar. Set the grouping on the
number format.
(parse): Copy the calendar before modifying it. Correctly handle
the time zone.
* java/util/Calendar.java (clear): Set field value(s) to 0.
2001-05-10 Jeff Sturm <jsturm@one-point.com>
* Calendar.java (get): Clear areFieldsSet if requested field
is not set.
(set): Unset fields that depend on new value.
2001-05-06 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
* java/lang/Class.h (_Jv_Self): New union type.

View File

@ -1335,7 +1335,6 @@ java/net/natInetAddress.cc \
java/net/natPlainDatagramSocketImpl.cc \
java/net/natPlainSocketImpl.cc \
java/text/natCollator.cc \
java/util/natGregorianCalendar.cc \
java/util/zip/natDeflater.cc \
java/util/zip/natInflater.cc

View File

@ -73,6 +73,7 @@ CXXCPP = @CXXCPP@
DIRLTDL = @DIRLTDL@
DIVIDESPEC = @DIVIDESPEC@
DLLTOOL = @DLLTOOL@
EXCEPTIONSPEC = @EXCEPTIONSPEC@
EXEEXT = @EXEEXT@
GCDEPS = @GCDEPS@
GCINCS = @GCINCS@
@ -119,29 +120,43 @@ here = @here@
libgcj_basedir = @libgcj_basedir@
AUTOMAKE_OPTIONS = foreign
@TESTSUBDIR_TRUE@SUBDIRS = @TESTSUBDIR_TRUE@$(DIRLTDL) testsuite gcj include
@TESTSUBDIR_FALSE@SUBDIRS = @TESTSUBDIR_FALSE@$(DIRLTDL) gcj include
@USE_LIBDIR_TRUE@toolexeclibdir = @USE_LIBDIR_TRUE@$(libdir)$(MULTISUBDIR)
@USE_LIBDIR_FALSE@toolexeclibdir = @USE_LIBDIR_FALSE@$(toolexecdir)/lib$(MULTISUBDIR)
@USE_LIBDIR_FALSE@toolexecdir = @USE_LIBDIR_FALSE@$(exec_prefix)/$(target_alias)
@XLIB_AWT_TRUE@cond_x_ltlibrary = @XLIB_AWT_TRUE@libgcjx.la
@XLIB_AWT_FALSE@cond_x_ltlibrary =
@TESTSUBDIR_TRUE@SUBDIRS = \
@TESTSUBDIR_TRUE@$(DIRLTDL) testsuite gcj include
@TESTSUBDIR_FALSE@SUBDIRS = \
@TESTSUBDIR_FALSE@$(DIRLTDL) gcj include
@USE_LIBDIR_TRUE@toolexeclibdir = \
@USE_LIBDIR_TRUE@$(libdir)$(MULTISUBDIR)
@USE_LIBDIR_FALSE@toolexeclibdir = \
@USE_LIBDIR_FALSE@$(toolexecdir)/lib$(MULTISUBDIR)
@USE_LIBDIR_FALSE@toolexecdir = \
@USE_LIBDIR_FALSE@$(exec_prefix)/$(target_alias)
@XLIB_AWT_TRUE@cond_x_ltlibrary = \
@XLIB_AWT_TRUE@libgcjx.la
@XLIB_AWT_FALSE@cond_x_ltlibrary = \
toolexeclib_LTLIBRARIES = libgcj.la $(cond_x_ltlibrary)
toolexeclib_DATA = libgcj.spec
data_DATA = libgcj.jar
@NEEDS_DATA_START_TRUE@toolexeclib_LIBRARIES = @NEEDS_DATA_START_TRUE@libgcjdata.a
@NEEDS_DATA_START_TRUE@libgcjdata_a_SOURCES = @NEEDS_DATA_START_TRUE@libgcjdata.c
@NEEDS_DATA_START_TRUE@toolexeclib_LIBRARIES = \
@NEEDS_DATA_START_TRUE@libgcjdata.a
@NEEDS_DATA_START_TRUE@libgcjdata_a_SOURCES = \
@NEEDS_DATA_START_TRUE@libgcjdata.c
@NATIVE_TRUE@bin_PROGRAMS = @NATIVE_TRUE@jv-convert gij
@NATIVE_TRUE@bin_PROGRAMS = \
@NATIVE_TRUE@jv-convert gij
bin_SCRIPTS = addr2name.awk
@CANADIAN_TRUE@@NULL_TARGET_TRUE@ZIP = @CANADIAN_TRUE@@NULL_TARGET_TRUE@$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/fastjar$(EXEEXT)
@CANADIAN_TRUE@@NULL_TARGET_FALSE@ZIP = @CANADIAN_TRUE@@NULL_TARGET_FALSE@fastjar
@CANADIAN_FALSE@ZIP = @CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/fastjar$(EXEEXT)
@CANADIAN_TRUE@GCJH = @CANADIAN_TRUE@gcjh
@CANADIAN_FALSE@GCJH = @CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh$(EXEEXT)
@CANADIAN_TRUE@@NULL_TARGET_TRUE@ZIP = \
@CANADIAN_TRUE@@NULL_TARGET_TRUE@$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/fastjar$(EXEEXT)
@CANADIAN_TRUE@@NULL_TARGET_FALSE@ZIP = \
@CANADIAN_TRUE@@NULL_TARGET_FALSE@fastjar
@CANADIAN_FALSE@ZIP = \
@CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/fastjar$(EXEEXT)
@CANADIAN_TRUE@GCJH = \
@CANADIAN_TRUE@gcjh
@CANADIAN_FALSE@GCJH = \
@CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh$(EXEEXT)
GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8
@ -160,8 +175,10 @@ AM_CXXFLAGS = -fno-rtti -fvtable-thunks -fnon-call-exceptions \
-fdollars-in-identifiers \
@LIBGCJ_CXXFLAGS@ @X_CFLAGS@ $(WARNINGS) -D_GNU_SOURCE
@USING_GCC_TRUE@AM_CFLAGS = @USING_GCC_TRUE@@LIBGCJ_CFLAGS@ $(WARNINGS)
@USING_GCC_FALSE@AM_CFLAGS = @USING_GCC_FALSE@@LIBGCJ_CFLAGS@
@USING_GCC_TRUE@AM_CFLAGS = \
@USING_GCC_TRUE@@LIBGCJ_CFLAGS@ $(WARNINGS)
@USING_GCC_FALSE@AM_CFLAGS = \
@USING_GCC_FALSE@@LIBGCJ_CFLAGS@
JCFLAGS = -g
JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS)
@ -229,7 +246,8 @@ extra_headers = java/lang/Object.h java/lang/Class.h
NM = nm
@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS = @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@gen-from-JIS
@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS = \
@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@gen-from-JIS
CONVERT_DIR = gnu/gcj/convert
@ -1060,7 +1078,6 @@ java/net/natInetAddress.cc \
java/net/natPlainDatagramSocketImpl.cc \
java/net/natPlainSocketImpl.cc \
java/text/natCollator.cc \
java/util/natGregorianCalendar.cc \
java/util/zip/natDeflater.cc \
java/util/zip/natInflater.cc
@ -1212,8 +1229,7 @@ java/lang/reflect/natArray.lo java/lang/reflect/natConstructor.lo \
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/zip/natDeflater.lo \
java/util/zip/natInflater.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 \
@ -1813,8 +1829,8 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/util/jar/JarEntry.P .deps/java/util/jar/JarException.P \
.deps/java/util/jar/JarFile.P .deps/java/util/jar/JarInputStream.P \
.deps/java/util/jar/JarOutputStream.P .deps/java/util/jar/Manifest.P \
.deps/java/util/natGregorianCalendar.P .deps/java/util/zip/Adler32.P \
.deps/java/util/zip/CRC32.P .deps/java/util/zip/CheckedInputStream.P \
.deps/java/util/zip/Adler32.P .deps/java/util/zip/CRC32.P \
.deps/java/util/zip/CheckedInputStream.P \
.deps/java/util/zip/CheckedOutputStream.P \
.deps/java/util/zip/Checksum.P \
.deps/java/util/zip/DataFormatException.P \
@ -2199,7 +2215,7 @@ distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
cp -pr $$d/$$file $(distdir)/$$file; \
cp -pr $$/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \

View File

@ -0,0 +1,37 @@
/* LocaleInformation.java -- Default locale information
Copyright (C) 1998 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
As a special exception, if you link this library with other files to
produce an executable, this library does not by itself cause the
resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why the
executable file might be covered by the GNU General Public License. */
package gnu.java.locale;
/**
* This is the resource bundle for the default locale, which right now is
* hardcoded to US English.
*/
public class LocaleInformation extends LocaleInformation_en
{
}

View File

@ -0,0 +1,220 @@
/* LocaleInformation_de.java -- German locale data
Copyright (C) 1999 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
As a special exception, if you link this library with other files to
produce an executable, this library does not by itself cause the
resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why the
executable file might be covered by the GNU General Public License. */
package gnu.java.locale;
import java.util.ListResourceBundle;
import java.util.Calendar;
/**
* This class contains locale data for the German locale
* @author Jochen Hoenicke
*/
public class LocaleInformation_de extends ListResourceBundle
{
/*
* This area is used for defining object values
*/
/**
* This is the set of collation rules used by java.text.RuleBasedCollator
* to sort strings properly. See the documentation of that class for the
* proper format.
*/
private static final String collation_rules =
"-<0,1<2<3<4<5<6<7<8<9<A,a<b,B<c,C<d,D<e,E<f,F<g,G<h,H<i,I<j,J<j,K" +
"<l,L<m,M<n,N<o,O<p,P<q,Q<r,R<s,S<t,T<u,U<v,V<w,W<x,X<y,Y,z<Z" +
"&ae,\u00e4&Ae,\u00c4&oe,\u00f6&Oe,\u00d6&ue,\u00fc&Ue,\u00dc&ss,\u00df";
/**
* This is the list of months, fully spelled out
*/
private static final String[] months = { "Januar", "Februar", "M\u00e4rz",
"April", "Mai", "Juni", "Juli", "August", "September", "Oktober",
"November", "Dezember", null };
/**
* This is the list of abbreviated month names
*/
private static final String[] shortMonths = {
"Jan", "Feb", "M\u00e4r", "Apr", "Mai",
"Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez", null
};
/**
* This is the list of weekdays, fully spelled out
*/
private static final String[] weekdays = {
null, "Sonntag", "Montag", "Dienstag",
"Mittwoch", "Donnerstag", "Freitag", "Samstag"
};
/**
* This is the list of abbreviated weekdays
*/
private static final String[] shortWeekdays = {
null, "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"
};
/**
* This is the list of era identifiers
*/
private static final String[] eras = { "v. Chr.", "n. Chr." };
/**
* This is the list of timezone strings. The JDK appears to include a
* city name as the sixth element.
*/
private static final String[][] zoneStrings =
{
// European time zones. The city names are a little bit random.
{ "WET", "Westeurop\u00e4ische Zeit", "WEZ", "Westeurop\u00e4ische Sommerzeit", "WESZ", "London" },
{ "CET", "Mitteleurop\u00e4ische Zeit", "MEZ", "Mitteleurop\u00e4ische Sommerzeit", "MESZ", "Berlin" },
{ "EET", "Osteurop\u00e4ische Zeit", "OEZ", "Mitteleurop\u00e4ische Sommerzeit", "OESZ", "Istanbul" },
};
/**
* This is the DateFormat.SHORT date format
*/
private static final String shortDateFormat = "dd.MM.yy";
/**
* This is the DateFormat.MEDIUM format
*/
private static final String mediumDateFormat = "d. MMM yy";
/**
* This is the DateFormat.LONG format
*/
private static final String longDateFormat = "d. MMMM yyyy";
/**
* This is the DateFormat.FULL format
*/
private static final String fullDateFormat = "EEEE, d. MMMM yyyy";
/**
* This is the DateFormat.DEFAULT format
*/
private static final String defaultDateFormat = "dd.MM.yy";
/**
* This is the DateFormat.SHORT format
*/
private static final String shortTimeFormat = "H:mm";
/**
* This is the DateFormat.MEDIUM format
*/
private static final String mediumTimeFormat = "H:mm:ss";
/**
* This is the DateFormat.LONG format
*/
private static final String longTimeFormat = "H:mm:ss z";
/**
* This is the DateFormat.FULL format
*/
private static final String fullTimeFormat = "H:mm:ss 'Uhr' z";
/**
* This is the DateFormat.DEFAULT format
*/
private static final String defaultTimeFormat = "H:mm:ss";
/**
* This is the currency symbol
*/
private static final String currencySymbol = "DM";
/**
* This is the international currency symbol.
*/
private static final String intlCurrencySymbol = "DEM";
/**
* This is the decimal point.
*/
private static final String decimalSeparator = ",";
/**
* This is the decimal separator in monetary values.
*/
private static final String monetarySeparator = ",";
/*************************************************************************/
/**
* This is the object array used to hold the keys and values
* for this bundle
*/
private static final Object[][] contents =
{
// For RuleBasedCollator
{ "collation_rules", collation_rules },
// For SimpleDateFormat/DateFormatSymbols
{ "months", months },
{ "shortMonths", shortMonths },
{ "weekdays", weekdays },
{ "shortWeekdays", shortWeekdays },
{ "eras", eras },
{ "zoneStrings", zoneStrings },
{ "shortDateFormat", shortDateFormat },
{ "mediumDateFormat", mediumDateFormat },
{ "longDateFormat", longDateFormat },
{ "fullDateFormat", fullDateFormat },
{ "defaultDateFormat", defaultDateFormat },
{ "shortTimeFormat", shortTimeFormat },
{ "mediumTimeFormat", mediumTimeFormat },
{ "longTimeFormat", longTimeFormat },
{ "fullTimeFormat", fullTimeFormat },
{ "defaultTimeFormat", defaultTimeFormat },
// For DecimalFormat/DecimalFormatSymbols
{ "currencySymbol", currencySymbol },
{ "intlCurrencySymbol", intlCurrencySymbol },
{ "decimalSeparator", decimalSeparator },
{ "monetarySeparator", monetarySeparator },
};
/*************************************************************************/
/**
* This method returns the object array of key, value pairs containing
* the data for this bundle.
*
* @return The key, value information.
*/
public Object[][]
getContents()
{
return(contents);
}
} // class LocaleInformation_de

View File

@ -0,0 +1,332 @@
/* LocaleInformation_en.java -- US English locale data
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
As a special exception, if you link this library with other files to
produce an executable, this library does not by itself cause the
resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why the
executable file might be covered by the GNU General Public License. */
package gnu.java.locale;
import java.util.ListResourceBundle;
import java.util.Calendar;
import java.util.Date;
/**
* This class contains locale data for the US English locale
*/
public class LocaleInformation_en extends ListResourceBundle
{
/*
* This area is used for defining object values
*/
/**
* This is the set of collation rules used by java.text.RuleBasedCollator
* to sort strings properly. See the documentation of that class for the
* proper format.
*/
private static final String collation_rules =
"-<0,1<2<3<4<5<6<7<8<9A,a<b,B<c,C<d,D<e,E<f,F<g,G<h,H<i,I<j,J<j,K" +
"<l,L<m,M<n,N<o,O<p,P<q,Q<r,R<s,S<t,T<u,U<v,V<w,W<x,X<y,Y,z<Z";
/*
* For the followings lists, strings that are subsets of other break strigns
* must be listed first. For example, if "\r" and "\r\n" are sequences,
* the "\r" must be first or it will never be used.
*/
/**
* This is the list of word separator characters used by
* java.text.BreakIterator
*/
private static final String[] word_breaks = { " ", "\t", "\r\n", "\n" };
/**
* This is the list of sentence break sequences used by
* java.text.BreakIterator
*/
private static final String[] sentence_breaks = { ". " };
/**
* This is the list of potential line break locations.
*/
private static final String[] line_breaks = { "\t", "-", "\r\n",
"\n", ". ", ". ", ".", "? ", "? ", "?", "! ", "! ", "!", ", ", " " };
/**
* This is the list of months, fully spelled out
*/
private static final String[] months = { "January", "February", "March",
"April", "May", "June", "July", "August", "September", "October",
"November", "December", null };
/**
* This is the list of abbreviated month names
*/
private static final String[] shortMonths = { "Jan", "Feb", "Mar", "Apr", "May",
"Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", null };
/**
* This is the list of weekdays, fully spelled out
*/
private static final String[] weekdays = { null, "Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday" };
/**
* This is the list of abbreviated weekdays
*/
private static final String[] shortWeekdays = { null, "Sun", "Mon", "Tue", "Wed",
"Thu", "Fri", "Sat" };
/**
* This is the list of AM/PM strings
*/
private static final String[] ampms = { "AM", "PM" };
/**
* This is the list of era identifiers
*/
private static final String[] eras = { "BC", "AD" };
/**
* This is the list of timezone strings. The JDK appears to include a
* city name as the sixth element.
*/
private static final String[][] zoneStrings =
{
{ "EST6EDT", "Eastern Standard Time", "EST", "Eastern Daylight Time", "EDT",
"New York" },
{ "EST6", "Eastern Standard Time", "EST", "Eastern Standard Time", "EST",
"Indianapolis" },
{ "CST6CDT", "Central Standard Time", "CST", "Central Daylight Time", "CDT",
"Chicago" },
{ "MST6MDT", "Mountain Standard Time", "MST", "Mountain Daylight Time",
"MDT", "Denver" },
{ "MST6", "Mountain Standard Time", "MST", "Mountain Standard Time", "MST",
"Phoenix" },
{ "PST6PDT", "Pacific Standard Time", "PDT", "Pacific Daylight Time", "PDT",
"San Francisco" },
{ "AST6ADT", "Alaska Standard Time", "AST", "Alaska Daylight Time", "ADT",
"Anchorage" },
{ "HST6HDT", "Hawaii Standard Time", "HST", "Hawaii Daylight Time", "HDT",
"Honolulu" },
// European time zones. The city names are a little bit random.
{ "WET", "Western European Time", "WET", "Western European Savings Time", "WEST", "London" },
{ "CET", "Central European Time", "CET", "Central European Savings Time", "CEST", "Berlin" },
{ "EET", "Eastern European Time", "EET", "Eastern European Savings Time", "EEST", "Istanbul" },
};
/**
* This is the list of pattern characters for formatting dates
*/
private static final String localPatternChars = "GyMdkHmsSEDFwWahKz"; // Not a mistake!
/**
* This is the DateFormat.SHORT date format
*/
private static final String shortDateFormat = "M/d/yy";
/**
* This is the DateFormat.MEDIUM format
*/
private static final String mediumDateFormat = "dd-MMM-yy";
/**
* This is the DateFormat.LONG format
*/
private static final String longDateFormat = "MMMM d, yyyy";
/**
* This is the DateFormat.FULL format
*/
private static final String fullDateFormat = "EEEE, MMMM d, yyyy";
/**
* This is the DateFormat.DEFAULT format
*/
private static final String defaultDateFormat = "dd-MMM-yy";
/**
* This is the DateFormat.SHORT format
*/
private static final String shortTimeFormat = "h:mm a";
/**
* This is the DateFormat.MEDIUM format
*/
private static final String mediumTimeFormat = "h:mm:ss a";
/**
* This is the DateFormat.LONG format
*/
private static final String longTimeFormat = "h:mm:ss a z";
/**
* This is the DateFormat.FULL format
*/
private static final String fullTimeFormat = "h:mm:ss 'o''clock' a z";
/**
* This is the DateFormat.DEFAULT format
*/
private static final String defaultTimeFormat = "h:mm:ss a";
/**
* This is the currency symbol
*/
private static final String currencySymbol = "$";
/**
* This is the international currency symbol.
*/
private static final String intlCurrencySymbol = "US$";
/**
* This is the decimal point.
*/
private static final String decimalSeparator = ".";
/**
* This is the exponential symbol
*/
private static final String exponential = "E";
/**
* This is the char used for digits in format strings
*/
private static final String digit = "#";
/**
* This is the grouping separator symbols
*/
private static final String groupingSeparator = ",";
/**
* This is the symbols for infinity
*/
private static final String infinity = "\u221e";
/**
* This is the symbol for the not a number value
*/
private static final String NaN = "\ufffd";
/**
* This is the minus sign symbol.
*/
private static final String minusSign = "-";
/**
* This is the decimal separator in monetary values.
*/
private static final String monetarySeparator = ".";
/**
* This is the separator between positive and negative subpatterns.
*/
private static final String patternSeparator = ";";
/**
* This is the percent sign
*/
private static final String percent = "%";
/**
* This is the per mille sign
*/
private static final String perMill = "\u2030";
/**
* This is the character for zero.
*/
private static final String zeroDigit = "0";
/*************************************************************************/
/**
* This is the object array used to hold the keys and values
* for this bundle
*/
private static final Object[][] contents =
{
// For RuleBasedCollator
{ "collation_rules", collation_rules },
// For BreakIterator
{ "word_breaks", word_breaks },
{ "sentence_breaks", sentence_breaks },
{ "line_breaks", line_breaks },
// For SimpleDateFormat/DateFormatSymbols
{ "months", months },
{ "shortMonths", shortMonths },
{ "weekdays", weekdays },
{ "shortWeekdays", shortWeekdays },
{ "ampms", ampms },
{ "eras", eras },
{ "zoneStrings", zoneStrings },
{ "localPatternChars", localPatternChars },
{ "shortDateFormat", shortDateFormat },
{ "mediumDateFormat", mediumDateFormat },
{ "longDateFormat", longDateFormat },
{ "fullDateFormat", fullDateFormat },
{ "defaultDateFormat", defaultDateFormat },
{ "shortTimeFormat", shortTimeFormat },
{ "mediumTimeFormat", mediumTimeFormat },
{ "longTimeFormat", longTimeFormat },
{ "fullTimeFormat", fullTimeFormat },
{ "defaultTimeFormat", defaultTimeFormat },
// For DecimalFormat/DecimalFormatSymbols
{ "currencySymbol", currencySymbol },
{ "intlCurrencySymbol", intlCurrencySymbol },
{ "decimalSeparator", decimalSeparator },
{ "digit", digit },
{ "exponential", exponential },
{ "groupingSeparator", groupingSeparator },
{ "infinity", infinity },
{ "NaN", NaN },
{ "minusSign", minusSign },
{ "monetarySeparator", monetarySeparator },
{ "patternSeparator", patternSeparator },
{ "percent", percent },
{ "perMill", perMill },
{ "zeroDigit", zeroDigit },
};
/*************************************************************************/
/**
* This method returns the object array of key, value pairs containing
* the data for this bundle.
*
* @return The key, value information.
*/
public Object[][]
getContents()
{
return(contents);
}
} // class LocaleInformation_en

View File

@ -0,0 +1,338 @@
/* LocaleInformation_nl.java -- Dutch locale data
Copyright (C) 1999 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
As a special exception, if you link this library with other files to
produce an executable, this library does not by itself cause the
resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why the
executable file might be covered by the GNU General Public License. */
package gnu.java.locale;
import java.util.ListResourceBundle;
import java.util.Calendar;
import java.util.Date;
/**
* This class contains locale data for the Dutch locale
*/
public class LocaleInformation_nl extends ListResourceBundle
{
/*
* This area is used for defining object values
*/
/**
* This is the set of collation rules used by java.text.RuleBasedCollator
* to sort strings properly. See the documentation of that class for the
* proper format.
* <p>
* This is the same rule as used in the English locale.
*/
private static final String collation_rules =
"-<0,1<2<3<4<5<6<7<8<9A,a<b,B<c,C<d,D<e,E<f,F<g,G<h,H<i,I<j,J<j,K" +
"<l,L<m,M<n,N<o,O<p,P<q,Q<r,R<s,S<t,T<u,U<v,V<w,W<x,X<y,Y,z<Z";
/*
* For the followings lists, strings that are subsets of other break strings
* must be listed first. For example, if "\r" and "\r\n" are sequences,
* the "\r" must be first or it will never be used.
*/
/**
* This is the list of word separator characters used by
* java.text.BreakIterator
* <p>
* This is the same list as used in the English local
*/
private static final String[] word_breaks = { " ", "\t", "\r\n", "\n" };
/**
* This is the list of sentence break sequences used by
* java.text.BreakIterator
* <p>
* This is the same list as used in the English local
*/
private static final String[] sentence_breaks = { ". " };
/**
* This is the list of potential line break locations.
* <p>
* This is the same list as used in the English local
*/
private static final String[] line_breaks = { "\t", "-", "\r\n",
"\n", ". ", ". ", ".", "? ", "? ", "?", "! ", "! ", "!", ", ", " " };
/**
* This is the list of months, fully spelled out
*/
private static final String[] months = { "januari", "februari", "maart",
"april", "mei", "juni", "juli", "augustus", "september", "october",
"november", "december", null };
/**
* This is the list of abbreviated month names
*/
private static final String[] shortMonths = { "jan", "feb", "mrt", "apr", "mei",
"jun", "jul", "aug", "sep", "oct", "nov", "dec", null };
/**
* This is the list of weekdays, fully spelled out
*/
private static final String[] weekdays = { null, "zondag", "maandag", "dinsdag",
"woensdag", "donderdag", "vrijdag", "zaterdag" };
/**
* This is the list of abbreviated weekdays
*/
private static final String[] shortWeekdays = { null, "zo", "ma", "di", "wo",
"do", "vr", "za" };
/**
* This is the list of AM/PM strings
* <p>
* Is there a real equivalent in Dutch? "Voormiddag"/"Namiddag"?
* Just using the Latin names for now.
*/
private static final String[] ampms = { "AM", "PM" };
/**
* This is the list of era identifiers
* <p>
* Is there a real equivalent in Dutch? "voor Christus"/"na Christus"?
* Just use the Latin/English names for now.
*/
private static final String[] eras = { "BC", "AD" };
/**
* This is the list of timezone strings. The JDK appears to include a
* city name as the sixth element.
* XXX - TODO - FIXME - Which timezones should be included here and how are
* they called?
*/
private static final String[][] zoneStrings =
{
// European time zones. The city names are a little bit random.
{ "WET", "West Europese Tijd", "WET", "West Europese Zomertijd", "WEST", "London" },
{ "CET", "Centraal Europese Tijd", "CET", "Centraal Europese Zomertijd", "CEST", "Amsterdam" },
{ "EET", "Oost Europese Tijd", "EET", "Oost Europese Zomertijd", "EEST", "Istanbul" },
};
/**
* This is the list of pattern characters for formatting dates
* <p>
* This is the same as the English locale uses: era (G), year (y), month (M),
* month (d), hour from 1-12 (h), hour 0-23 (H), minute (m), second (s),
* millisecond (S), date of week (E), date of year (D),
* day of week in month (F), week in year (w), week in month (W), am/pm (a),
* hour from 1-24 (k), hour from 0-11 (K), time zone (z).
* Why would you use others?
*/
private static final String localPatternChars = "GyMdhHmsSEDFwWakKz"; // Not a mistake!
/**
* This is the DateFormat.SHORT date format
*/
private static final String shortDateFormat = "dd-MM-yy";
/**
* This is the DateFormat.MEDIUM format
*/
private static final String mediumDateFormat = "dd-MMM-yy";
/**
* This is the DateFormat.LONG format
*/
private static final String longDateFormat = "dd MMMM yyyy";
/**
* This is the DateFormat.FULL format
*/
private static final String fullDateFormat = "EEEE dd MMMM yyyy";
/**
* This is the DateFormat.DEFAULT format
*/
private static final String defaultDateFormat = mediumDateFormat;
/**
* This is the TimeFormat.SHORT format
*/
private static final String shortTimeFormat = "HH:mm";
/**
* This is the TimeFormat.MEDIUM format
*/
private static final String mediumTimeFormat = "HH:mm:ss";
/**
* This is the TimeFormat.LONG format
*/
private static final String longTimeFormat = "HH:mm:ss";
/**
* This is the TimeFormat.FULL format
*/
private static final String fullTimeFormat = "HH:mm:ss z";
/**
* This is the TimeFormat.DEFAULT format
*/
private static final String defaultTimeFormat = shortTimeFormat;
/**
* This is the currency symbol
*/
private static final String currencySymbol = "fl";
/**
* This is the international currency symbol.
*/
private static final String intlCurrencySymbol = "NLG";
/**
* This is the decimal point.
*/
private static final String decimalSeparator = ",";
/**
* This is the exponential symbol
*/
private static final String exponential = "E";
/**
* This is the char used for digits in format strings
*/
private static final String digit = "#";
/**
* This is the grouping separator symbols
*/
private static final String groupingSeparator = ",";
/**
* This is the symbols for infinity
*/
private static final String infinity = "\u221e";
/**
* This is the symbol for the not a number value
*/
private static final String NaN = "\ufffd";
/**
* This is the minus sign symbol.
*/
private static final String minusSign = "-";
/**
* This is the decimal separator in monetary values.
*/
private static final String monetarySeparator = ",";
/**
* This is the separator between positive and negative subpatterns.
*/
private static final String patternSeparator = ";";
/**
* This is the percent sign
*/
private static final String percent = "%";
/**
* This is the per mille sign
*/
private static final String perMill = "\u2030";
/**
* This is the character for zero.
*/
private static final String zeroDigit = "0";
/*************************************************************************/
/**
* This is the object array used to hold the keys and values
* for this bundle
*/
private static final Object[][] contents =
{
// For RuleBasedCollator
{ "collation_rules", collation_rules },
// For BreakIterator
{ "word_breaks", word_breaks },
{ "sentence_breaks", sentence_breaks },
{ "line_breaks", line_breaks },
// For SimpleDateFormat/DateFormatSymbols
{ "months", months },
{ "shortMonths", shortMonths },
{ "weekdays", weekdays },
{ "shortWeekdays", shortWeekdays },
{ "ampms", ampms },
{ "eras", eras },
{ "zoneStrings", zoneStrings },
{ "localPatternChars", localPatternChars },
{ "shortDateFormat", shortDateFormat },
{ "mediumDateFormat", mediumDateFormat },
{ "longDateFormat", longDateFormat },
{ "fullDateFormat", fullDateFormat },
{ "defaultDateFormat", defaultDateFormat },
{ "shortTimeFormat", shortTimeFormat },
{ "mediumTimeFormat", mediumTimeFormat },
{ "longTimeFormat", longTimeFormat },
{ "fullTimeFormat", fullTimeFormat },
{ "defaultTimeFormat", defaultTimeFormat },
// For DecimalFormat/DecimalFormatSymbols
{ "currencySymbol", currencySymbol },
{ "intlCurrencySymbol", intlCurrencySymbol },
{ "decimalSeparator", decimalSeparator },
{ "digit", digit },
{ "exponential", exponential },
{ "groupingSeparator", groupingSeparator },
{ "infinity", infinity },
{ "NaN", NaN },
{ "minusSign", minusSign },
{ "monetarySeparator", monetarySeparator },
{ "patternSeparator", patternSeparator },
{ "percent", percent },
{ "perMill", perMill },
{ "zeroDigit", zeroDigit },
};
/*************************************************************************/
/**
* This method returns the object array of key, value pairs containing
* the data for this bundle.
*
* @return The key, value information.
*/
public Object[][]
getContents()
{
return(contents);
}
} // class LocaleInformation_nl

View File

@ -62,8 +62,7 @@ public class SimpleDateFormat extends DateFormat
private transient Vector tokens;
private DateFormatSymbols formatData; // formatData
private Date defaultCenturyStart =
new Date(System.currentTimeMillis() - (80*365*24*60*60*1000));
private Date defaultCenturyStart = computeCenturyStart ();
private String pattern;
private int serialVersionOnStream = 1; // 0 indicates JDK1.1.3 or earlier
private static final long serialVersionUID = 4774881970558875024L;
@ -79,8 +78,7 @@ public class SimpleDateFormat extends DateFormat
stream.defaultReadObject();
if (serialVersionOnStream < 1)
{
defaultCenturyStart =
new Date(System.currentTimeMillis() - (80*365*24*60*60*1000));
defaultCenturyStart = computeCenturyStart ();
serialVersionOnStream = 1;
}
@ -161,11 +159,14 @@ public class SimpleDateFormat extends DateFormat
super();
Locale locale = Locale.getDefault();
calendar = new GregorianCalendar(locale);
calendar.clear ();
tokens = new Vector();
formatData = new DateFormatSymbols(locale);
pattern = formatData.dateFormats[DEFAULT]+' '+formatData.timeFormats[DEFAULT];
pattern = (formatData.dateFormats[DEFAULT] + ' '
+ formatData.timeFormats[DEFAULT]);
compileFormat(pattern);
numberFormat = NumberFormat.getInstance(locale);
numberFormat.setGroupingUsed (false);
}
/**
@ -185,20 +186,24 @@ public class SimpleDateFormat extends DateFormat
{
super();
calendar = new GregorianCalendar(locale);
calendar.clear ();
tokens = new Vector();
formatData = new DateFormatSymbols(locale);
compileFormat(pattern);
this.pattern = pattern;
numberFormat = NumberFormat.getInstance(locale);
numberFormat.setGroupingUsed (false);
}
/**
* Creates a date formatter using the specified pattern. The
* specified DateFormatSymbols will be used when formatting.
*/
public SimpleDateFormat(String pattern, DateFormatSymbols formatData) {
public SimpleDateFormat(String pattern, DateFormatSymbols formatData)
{
super();
calendar = new GregorianCalendar();
calendar.clear ();
// FIXME: XXX: Is it really necessary to set the timezone?
// The Calendar constructor is supposed to take care of this.
calendar.setTimeZone(TimeZone.getDefault());
@ -207,6 +212,7 @@ public class SimpleDateFormat extends DateFormat
compileFormat(pattern);
this.pattern = pattern;
numberFormat = NumberFormat.getInstance();
numberFormat.setGroupingUsed (false);
}
// What is the difference between localized and unlocalized? The
@ -377,7 +383,8 @@ public class SimpleDateFormat extends DateFormat
* appending to the specified StringBuffer. The input StringBuffer
* is returned as output for convenience.
*/
public StringBuffer format(Date date, StringBuffer buffer, FieldPosition pos) {
public StringBuffer format(Date date, StringBuffer buffer, FieldPosition pos)
{
String temp;
Calendar theCalendar = (Calendar) calendar.clone();
theCalendar.setTime(date);
@ -507,7 +514,10 @@ public class SimpleDateFormat extends DateFormat
int fmt_index = 0;
int fmt_max = pattern.length();
calendar.clear();
// We copy the Calendar because if we don't we will modify it and
// then this.equals() will no longer have the desired result.
Calendar theCalendar = (Calendar) calendar.clone ();
theCalendar.clear();
int quote_start = -1;
for (; fmt_index < fmt_max; ++fmt_index)
{
@ -553,7 +563,6 @@ public class SimpleDateFormat extends DateFormat
boolean is_numeric = true;
String[] match = null;
int offset = 0;
int zone_number = 0;
switch (ch)
{
case 'd':
@ -626,6 +635,7 @@ public class SimpleDateFormat extends DateFormat
// We need a special case for the timezone, because it
// uses a different data structure than the other cases.
is_numeric = false;
// We don't actually use this; see below.
calendar_field = Calendar.DST_OFFSET;
String[][] zoneStrings = formatData.getZoneStrings();
int zoneCount = zoneStrings.length;
@ -642,11 +652,11 @@ public class SimpleDateFormat extends DateFormat
}
if (k != strings.length)
{
if (k > 2)
; // FIXME: dst.
zone_number = 0; // FIXME: dst.
// FIXME: raw offset to SimpleTimeZone const.
calendar.setTimeZone(new SimpleTimeZone (1, strings[0]));
found_zone = true;
TimeZone tz = TimeZone.getTimeZone (strings[0]);
theCalendar.setTimeZone (tz);
theCalendar.clear (Calendar.DST_OFFSET);
theCalendar.clear (Calendar.ZONE_OFFSET);
pos.setIndex(index + strings[k].length());
break;
}
@ -690,15 +700,16 @@ public class SimpleDateFormat extends DateFormat
value = i;
}
else
value = zone_number;
value = 0;
// Assign the value and move on.
calendar.set(calendar_field, value);
if (calendar_field != Calendar.DST_OFFSET)
theCalendar.set(calendar_field, value);
}
try
{
return calendar.getTime();
return theCalendar.getTime();
}
catch (IllegalArgumentException x)
{
@ -706,4 +717,21 @@ public class SimpleDateFormat extends DateFormat
return null;
}
}
// Compute the start of the current century as defined by
// get2DigitYearStart.
private Date computeCenturyStart ()
{
// Compute the current year. We assume a year has 365 days. Then
// compute 80 years ago, and finally reconstruct the number of
// milliseconds. We do this computation in this strange way
// because it lets us easily truncate the milliseconds, seconds,
// etc, which don't matter and which confuse
// SimpleDateFormat.equals().
long now = System.currentTimeMillis ();
now /= 365L * 24L * 60L * 60L * 1000L;
now -= 80;
now *= 365L * 24L * 60L * 60L * 1000L;
return new Date (now);
}
}

View File

@ -1,5 +1,5 @@
/* java.util.Calendar
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.
@ -54,7 +54,7 @@ import java.io.*;
*
* When computing the date from time fields, it may happen, that there
* are either two few fields set, or some fields are inconsistent. This
* cases will handled in a calender specific way. Missing fields are
* cases will handled in a calendar specific way. Missing fields are
* replaced by the fields of the epoch: 1970 January 1 00:00. <br>
*
* To understand, how the day of year is computed out of the fields
@ -356,7 +356,7 @@ public abstract class Calendar implements Serializable, Cloneable
private static final String bundleName = "gnu.java.locale.Calendar";
/**
* Constructs a new Calender with the default time zone and the default
* Constructs a new Calendar with the default time zone and the default
* locale.
*/
protected Calendar()
@ -365,7 +365,7 @@ public abstract class Calendar implements Serializable, Cloneable
}
/**
* Constructs a new Calender with the given time zone and the given
* Constructs a new Calendar with the given time zone and the given
* locale.
* @param zone a time zone.
* @param locale a locale.
@ -483,7 +483,7 @@ public abstract class Calendar implements Serializable, Cloneable
}
/**
* Sets this Calender's time to the given Date. All time fields
* Sets this Calendar's time to the given Date. All time fields
* are invalidated by this method.
*/
public final void setTime(Date date)
@ -503,7 +503,7 @@ public abstract class Calendar implements Serializable, Cloneable
}
/**
* Sets this Calender's time to the given Time. All time fields
* Sets this Calendar's time to the given Time. All time fields
* are invalidated by this method.
* @param time the time in milliseconds since the epoch
*/
@ -522,6 +522,9 @@ public abstract class Calendar implements Serializable, Cloneable
*/
public final int get(int field)
{
// If the requested field is invalid, force all fields to be recomputed.
if (!isSet[field])
areFieldsSet = false;
complete();
return fields[field];
}
@ -551,6 +554,29 @@ public abstract class Calendar implements Serializable, Cloneable
isTimeSet = false;
fields[field] = value;
isSet[field] = true;
switch (field)
{
case YEAR:
case MONTH:
case DATE:
isSet[WEEK_OF_YEAR] = false;
isSet[DAY_OF_YEAR] = false;
isSet[WEEK_OF_MONTH] = false;
isSet[DAY_OF_WEEK] = false;
isSet[DAY_OF_WEEK_IN_MONTH] = false;
break;
case AM_PM:
isSet[HOUR_OF_DAY] = false;
break;
case HOUR_OF_DAY:
isSet[AM_PM] = false;
isSet[HOUR] = false;
break;
case HOUR:
isSet[AM_PM] = false;
isSet[HOUR_OF_DAY] = false;
break;
}
}
/**
@ -568,6 +594,11 @@ public abstract class Calendar implements Serializable, Cloneable
fields[MONTH] = month;
fields[DATE] = date;
isSet[YEAR] = isSet[MONTH] = isSet[DATE] = true;
isSet[WEEK_OF_YEAR] = false;
isSet[DAY_OF_YEAR] = false;
isSet[WEEK_OF_MONTH] = false;
isSet[DAY_OF_WEEK] = false;
isSet[DAY_OF_WEEK_IN_MONTH] = false;
}
/**
@ -584,6 +615,8 @@ public abstract class Calendar implements Serializable, Cloneable
fields[HOUR_OF_DAY] = hour;
fields[MINUTE] = minute;
isSet[HOUR_OF_DAY] = isSet[MINUTE] = true;
isSet[AM_PM] = false;
isSet[HOUR] = false;
}
/**
@ -611,7 +644,10 @@ public abstract class Calendar implements Serializable, Cloneable
isTimeSet = false;
areFieldsSet = false;
for (int i = 0; i < FIELD_COUNT; i++)
{
isSet[i] = false;
fields[i] = 0;
}
}
/**
@ -623,6 +659,7 @@ public abstract class Calendar implements Serializable, Cloneable
isTimeSet = false;
areFieldsSet = false;
isSet[field] = false;
fields[field] = 0;
}
/**
@ -647,7 +684,7 @@ public abstract class Calendar implements Serializable, Cloneable
}
/**
* Compares the given calender with this.
* Compares the given calendar with this.
* @param o the object to that we should compare.
* @return true, if the given object is a calendar, that represents
* the same time (but doesn't neccessary have the same fields).
@ -670,10 +707,10 @@ public abstract class Calendar implements Serializable, Cloneable
}
/**
* Compares the given calender with this.
* Compares the given calendar with this.
* @param o the object to that we should compare.
* @return true, if the given object is a calendar, and this calendar
* represents a smaller time than the calender o.
* represents a smaller time than the calendar o.
* @exception ClassCastException if o is not an calendar.
* @since JDK1.2 you don't need to override this method
*/
@ -683,10 +720,10 @@ public abstract class Calendar implements Serializable, Cloneable
}
/**
* Compares the given calender with this.
* Compares the given calendar with this.
* @param o the object to that we should compare.
* @return true, if the given object is a calendar, and this calendar
* represents a bigger time than the calender o.
* represents a bigger time than the calendar o.
* @exception ClassCastException if o is not an calendar.
* @since JDK1.2 you don't need to override this method
*/
@ -866,7 +903,7 @@ public abstract class Calendar implements Serializable, Cloneable
* @since jdk1.2
*/
// FIXME: XXX: Not abstract in JDK 1.2.
// public abstract int getActualMinimum(int field);
public abstract int getActualMinimum(int field);
/**
* Gets the actual maximum value that is allowed for the specified field.
@ -876,7 +913,7 @@ public abstract class Calendar implements Serializable, Cloneable
* @since jdk1.2
*/
// FIXME: XXX: Not abstract in JDK 1.2.
// public abstract int getActualMaximum(int field);
public abstract int getActualMaximum(int field);
/**
* Return a clone of this object.

File diff suppressed because it is too large Load Diff

View File

@ -1,159 +0,0 @@
/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation
This file is part of libgcj.
This software is copyrighted work licensed under the terms of the
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details. */
#include <config.h>
#ifdef ECOS
#include <string.h>
#endif
#include <gcj/cni.h>
#include <java/util/TimeZone.h>
#include <java/util/GregorianCalendar.h>
#include <java/lang/IllegalArgumentException.h>
#include <time.h>
void
java::util::GregorianCalendar::computeTime ()
{
struct tm tim;
tim.tm_sec = elements(fields)[SECOND];
tim.tm_min = elements(fields)[MINUTE];
tim.tm_hour = elements(fields)[HOUR_OF_DAY];
tim.tm_mday = elements(fields)[DATE];
tim.tm_mon = elements(fields)[MONTH];
tim.tm_year = elements(fields)[YEAR] - 1900;
tim.tm_isdst = 0;
#ifndef ECOS
// FIXME: None of the standard C library access to the ECOS calendar
// is yet available.
time_t t = mktime (&tim);
if (!isLenient ())
{
// mktime will correct for any time leniencies (e.g. 31-Apr becomes
// 1-May).
// Daylight savings time is a special case since times in hour 23
// will compute to hour 0 of the next day.
if (tim.tm_isdst == 0 || elements(fields)[HOUR_OF_DAY] != 23)
{
if (tim.tm_sec != elements(fields)[SECOND] ||
tim.tm_min != elements(fields)[MINUTE] ||
tim.tm_hour != elements(fields)[HOUR_OF_DAY] +
(tim.tm_isdst > 0 ? 1 : 0) ||
tim.tm_mday != elements(fields)[DATE] ||
tim.tm_mon != elements(fields)[MONTH] ||
tim.tm_year != elements(fields)[YEAR] - 1900)
throw new java::lang::IllegalArgumentException ();
}
else
{
// The easiest thing to do is to temporarily shift the clock
// back from the 23th hour so mktime doesn't cause the extra
// hour for DST to roll the date to the next day.
struct tm tmp_tim;
tmp_tim.tm_sec = elements(fields)[SECOND];
tmp_tim.tm_min = elements(fields)[MINUTE];
tmp_tim.tm_hour = elements(fields)[HOUR_OF_DAY] - 1;
tmp_tim.tm_mday = elements(fields)[DATE];
tmp_tim.tm_mon = elements(fields)[MONTH];
tmp_tim.tm_year = elements(fields)[YEAR] - 1900;
tmp_tim.tm_isdst = 0;
mktime (&tmp_tim);
if (tmp_tim.tm_sec != elements(fields)[SECOND] ||
tmp_tim.tm_min != elements(fields)[MINUTE] ||
tmp_tim.tm_hour != elements(fields)[HOUR_OF_DAY] ||
tmp_tim.tm_mday != elements(fields)[DATE] ||
tmp_tim.tm_mon != elements(fields)[MONTH] ||
tmp_tim.tm_year != elements(fields)[YEAR] - 1900)
throw new java::lang::IllegalArgumentException ();
}
}
#else
time_t t = 0;
#endif
// Adjust for local timezone (introduced by mktime) and our
// timezone.
#if defined (STRUCT_TM_HAS_GMTOFF)
t -= tim.tm_gmtoff;
#elif defined (HAVE_TIMEZONE)
t += timezone;
#endif
// Adjust for milliseconds.
time = t * (jlong) 1000 + elements(fields)[MILLISECOND];
// Now adjust for the real timezone, i.e. our timezone, which is in millis.
java::util::TimeZone *zone = getTimeZone ();
time += zone->getRawOffset();
isTimeSet = true;
}
void
java::util::GregorianCalendar::computeFields ()
{
time_t t = time / 1000;
int millis = time % 1000;
if (t < 0 && millis != 0)
{
t--;
millis = t - 1000 * t;
}
elements(fields)[MILLISECOND] = millis;
struct tm tim;
java::util::TimeZone *zone = getTimeZone ();
// FIXME: None of the standard C library access to the ECOS calendar
// is yet available.
#ifdef ECOS
memset (&tim, 0, sizeof tim);
#else
if (zone->getRawOffset() == 0 || ! zone->useDaylightTime())
{
#if defined(__JV_POSIX_THREADS__) && defined(HAVE_GMTIME_R)
gmtime_r (&t, &tim);
#else
// Get global lock (because gmtime uses a global buffer). FIXME
tim = *(struct tm*) gmtime (&t);
// Release global lock. FIXME
#endif
}
else
{
#if defined(__JV_POSIX_THREADS__) && defined(HAVE_LOCALTIME_R)
localtime_r (&t, &tim);
#else
// Get global lock (because localtime uses a global buffer). FIXME
tim = *(struct tm*) localtime (&t);
// Release global lock. FIXME
#endif
}
#endif /* ECOS */
elements(fields)[SECOND] = tim.tm_sec;
elements(fields)[MINUTE] = tim.tm_min;
elements(fields)[HOUR_OF_DAY] = tim.tm_hour;
elements(fields)[AM_PM] = tim.tm_hour < 12 ? AM : PM;
elements(fields)[HOUR] = tim.tm_hour % 12;
elements(fields)[DATE] = tim.tm_mday;
elements(fields)[MONTH] = tim.tm_mon;
elements(fields)[YEAR] = 1900 + tim.tm_year;
elements(fields)[DAY_OF_WEEK] = tim.tm_wday + 1;
elements(fields)[DAY_OF_WEEK_IN_MONTH] = ((tim.tm_mday - 1) / 7) + 1;
elements(fields)[DAY_OF_YEAR] = tim.tm_yday + 1;
elements(fields)[WEEK_OF_MONTH]
= (tim.tm_mday + 6 + (5 - tim.tm_wday + getFirstDayOfWeek()) % 7) / 7;
elements(fields)[WEEK_OF_YEAR]
= (tim.tm_yday + 7 + (5 - tim.tm_wday + getFirstDayOfWeek()) % 7) / 7;
elements(fields)[ERA] = AD;
elements(fields)[DST_OFFSET] = tim.tm_isdst <= 0 ? 0 : 60*60*1000;
elements(fields)[ZONE_OFFSET] = getTimeZone()->getRawOffset();
areFieldsSet = true;
for (int i = 0; i < FIELD_COUNT; i++)
elements(isSet__)[i] = true;
}