diff options
author | Mark Wielaard <mark@gcc.gnu.org> | 2005-02-22 00:58:36 +0000 |
---|---|---|
committer | Mark Wielaard <mark@gcc.gnu.org> | 2005-02-22 00:58:36 +0000 |
commit | 933e5b284a41cc6e1d21805c350d9aea5ef84006 (patch) | |
tree | 1ef9e4a70e8658f5a1afafb0f811039fb753f321 /libjava/java/util/SimpleTimeZone.java | |
parent | 665794a6c42fc7a9eb31cd12522db01ff4c652e1 (diff) | |
download | gcc-933e5b284a41cc6e1d21805c350d9aea5ef84006.zip gcc-933e5b284a41cc6e1d21805c350d9aea5ef84006.tar.gz gcc-933e5b284a41cc6e1d21805c350d9aea5ef84006.tar.bz2 |
[multiple changes]
2005-02-21 Mark Wielaard <mark@klomp.org>
* gnu/java/locale/LocaleInformation_en.java: Extend
localPatternChars to "GyMdkHmsSEDFwWahKzYeugAZ".
2005-02-21 Mark Wielaard <mark@klomp.org>
* java/text/SimpleDateFormat.java
(SimpleDateFormat(String, DateFormatSymbols)): Throw
NullPointerException when formatData is null.
2005-02-21 Mark Wielaard <mark@klomp.org>
* java/util/SimpleTimeZone.java (getOffset): Calculate beforeEnd by
taking dstSavings into account.
2005-02-21 Sven de Marothy <sven@physto.se>
* java/text/SimpleDateFormat.java,
(parse): Set correct DST_OFFSET to the correct value.
2005-02-21 Mark Wielaard <mark@klomp.org>
* java/util/SimpleTimeZone.java (checkRule): Throw
IllegalArgumentException when month out of range.
2005-02-21 Sven de Marothy <sven@physto.se>
* java/util/GregorianCalendar.java,
(add): Don't set fields directly anymore. Use set()
2005-02-21 Mark Wielaard <mark@klomp.org>
* java/text/SimpleDateFormat.java (CompiledField.toString):
Use StringBuffer, not StringBuilder.
(toString): Likewise.
2005-02-21 Sven de Marothy <sven@physto.se>
* java/util/Calendar.java
(clear): Dates should clear to local time.
* java/util/GregorianCalendar.java
(computeTime): Fix priority problem with DAY_OF_WEEK,
Handle non-sunday-startig weeks and minimumDaysInFirstWeek.
2005-02-21 Sven de Marothy <sven@physto.se>
* java/util/Calendar.java
(Calendar): Constructor should clear fields.
2005-02-21 Sven de Marothy <sven@physto.se>
* java/text/SimpleDateFormat.java
(parse): Tweak handling of 2-year dates
* java/util/Calendar.java
(clear): Clear fields to correct value.
* java/util/GregorianCalendar.java
(computeTime): Correct handling of time zones.
Correct field minimum values.
2005-02-21 Sven de Marothy <sven@physto.se>
* java/util/Calendar.java
(set) Invalidate all fields on first call to set().
2005-02-21 Sven de Marothy <sven@physto.se>
* java/util/GregorianCalendar.java
(computeTime): Fixed handling of time zones.
2005-02-21 Sven de Marothy <sven@physto.se>
* java/util/Calendar.java
(clear): Set values to Epoch instead of zero.
(set): Set isSet to the relevant field pattern instead of just
the field.
* java/util/GregorianCalendar.java
(getBundle): Removed.
(getDayOfYear): Removed.
(getFirstDayOfMonth): New private method.
(nonLeniencyCheck): New private method.
(computeTime): Correct handling of insufficient data.
2005-02-21 Sven de Marothy <sven@physto.se>
* java/util/Calendar.java: Invalidate ERA field on setting
the YEAR.
* java/util/SimpleTimeZone.java:
(getDaysInMonth): Reimplemented.
* java/util/GregorianCalendar.java:
(getLinearTime): Removed.
(isLeapYear(int,boolean)): Removed.
(before(), after()): Removed.
(computeTime): Reimplemented.
2005-02-21 Sven de Marothy <sven@physto.se>
* java/util/Calendar.java: Reformatted.
* java/util/GregorianCalendar.java: Reformatted.
* java/util/SimpleTimeZone.java: Reformatted.
2005-02-21 Sven de Marothy <sven@physto.se>
* java/util/GregorianCalendar.java
(GregorianCalendar): Update fields in the constructor
2005-02-21 Noa Resare <noa@resare.com>
* java/util/Calendar.java (explicitDSTOffset): New instance field.
(set(int,int)): Set and use new field.
(set(int,int,int)): Check new field.
2005-02-21 Noa Resare <address@hidden>
* java/util/Calendar.java(set):
Fix for DST related regression.
2005-02-21 Jeroen Frijters <jeroen@frijters.net>
* java/util/Calendar.java
(setTimeInMillis): Added call to clear, removed computeFields call.
* java/util/Date.java
(Date(int,int,int,int,int,int)): Removed workaround for
GregorianCalendar bug.
* java/util/GregorianCalendar.java
(GregorianCalendar): Chained all constructors to a (new)
common constructor.
(computeTime): Fixed support for lenient month treatment.
(getLinearDay): Return long instead of int.
(calculateDay): Added fields argument and changed day argument
to long.
2005-02-21 Andrew John Hughes <gnu_andrew@member.fsf.org>
* java/text/SimpleDateFormat.java
Lots of documentation updates.
(readObject(java.io.ObjectInputStream)): Wraps
IllegalArgumentException as specified.
(compileFormat(String)): Uses standardChars
rather than the local pattern characters.
Throws IllegalArgumentException rather than
storing a -1 field.
(toString()): Extended to include all variables
in a better format.
(translateLocalizedPattern(String, String, String)):
Renamed to better define the use of this method.
2005-02-21 Andrew John Hughes <gnu_andrew@member.fsf.org>
* java/text/DateFormat.java:
Documented pattern character offset constants and
added new ones.
(Field): Added new static fields for new pattern chars.
* java/text/SimpleDateFormat.java:
(CompiledField): Changed name of FieldSizePair class
to CompiledField after adding the character as an
attribute. Changed fields to private and added
accessors to give encapsulation.
(CompiledField.CompiledField(int,int,char)): Extended
with character field.
(CompiledField.getField()): New accessor method.
(CompiledField.getSize()): New acceessor method.
(CompiledField.getCharacter()): New accessor method.
(CompiledField.toString()): Added primarily for debugging.
(standardChars): Now uses extended 24 character sequence.
(compileFormat(String)): Changed to use CompiledField.
(formatWithAttribute(java.util.Date, gnu.java.text.FormatBuffer,
java.text.FieldPosition)): Changed to use CompiledField.
New handler for RFC 822 timezones added.
2005-02-21 Andrew John Hughes <gnu_andrew@member.fsf.org>
* java/text/SimpleDateFormat.java:
(parse(String, java.text.ParsePosition)):
Changed 'E' and 'M' cases to use both
short and long names. Extended 'z'
case to also handle 'Z', and deal
with simple GMT offsets such as +0100.
(computeOffset(String)): New private method,
which converts a GMT offset specification,
such as GMT-0500 to a numeric offset in
milliseconds.
* java/util/TimeZone.java:
(timezones()): Added "CEST", the daylight
savings time version of "CET", or Central
European Time.
2005-02-21 Ito Kazumitsu <kaz@maczuka.gcd.org>
* java/text/SimpleDateFormat.java:
(parse): Set the DST offset to 0 when parsing
GMT offset timezones.
2005-02-21 Ito Kazumitsu <kaz@maczuka.gcd.org>
* java/text/SimpleDateFormat.java:
(parse): Use offset to set ZONE_OFFSET
rather than the DST_OFFSET, so that
GMT offset timezones change the right
one.
2005-02-21 Andrew John Hughes <gnu_andrew@member.fsf.org>
* java/text/SimpleDateFormat.java:
(getDateFormatSymbols()): return a copy
(setDateFormatSymbols(java.text.DateFormatSymbols)):
throw exception on null input
(clone()): implemented to clone
internal fields
2005-02-21 Sven de Marothy <sven@physto.se>
* java/text/SimpleDateFormat.java
(parse): comparison should be case-insensitive, ignore null
strings.
From-SVN: r95368
Diffstat (limited to 'libjava/java/util/SimpleTimeZone.java')
-rw-r--r-- | libjava/java/util/SimpleTimeZone.java | 333 |
1 files changed, 155 insertions, 178 deletions
diff --git a/libjava/java/util/SimpleTimeZone.java b/libjava/java/util/SimpleTimeZone.java index 7d0e201..e50d92f 100644 --- a/libjava/java/util/SimpleTimeZone.java +++ b/libjava/java/util/SimpleTimeZone.java @@ -38,6 +38,7 @@ exception statement from your version. */ package java.util; + /** * This class represents a simple time zone offset and handles * daylight savings. It can only handle one daylight savings rule, so @@ -49,14 +50,14 @@ package java.util; * lying in the AD era. * * @see Calendar - * @see GregorianCalender + * @see GregorianCalender * @author Jochen Hoenicke */ public class SimpleTimeZone extends TimeZone { /** * The raw time zone offset in milliseconds to GMT, ignoring - * daylight savings. + * daylight savings. * @serial */ private int rawOffset; @@ -70,23 +71,22 @@ public class SimpleTimeZone extends TimeZone /** * The daylight savings offset. This is a positive offset in * milliseconds with respect to standard time. Typically this - * is one hour, but for some time zones this may be half an hour. + * is one hour, but for some time zones this may be half an our. * @serial * @since JDK1.1.4 */ private int dstSavings = 60 * 60 * 1000; /** - * The first year, in which daylight savings rules applies. + * The first year, in which daylight savings rules applies. * @serial */ private int startYear; - private static final int DOM_MODE = 1; private static final int DOW_IN_MONTH_MODE = 2; private static final int DOW_GE_DOM_MODE = 3; private static final int DOW_LE_DOM_MODE = 4; - + /** * The mode of the start rule. This takes one of the following values: * <dl> @@ -119,7 +119,7 @@ public class SimpleTimeZone extends TimeZone /** * The month in which daylight savings start. This is one of the - * constants Calendar.JANUARY, ..., Calendar.DECEMBER. + * constants Calendar.JANUARY, ..., Calendar.DECEMBER. * @serial */ private int startMonth; @@ -128,21 +128,21 @@ public class SimpleTimeZone extends TimeZone * This variable can have different meanings. See startMode for details * @see #startMode; * @serial - */ + */ private int startDay; - + /** - * This variable specifies the day of week the change takes place. If + * This variable specifies the day of week the change takes place. If * startMode == DOM_MODE, this is undefined. * @serial * @see #startMode; - */ + */ private int startDayOfWeek; - + /** * This variable specifies the time of change to daylight savings. * This time is given in milliseconds after midnight local - * standard time. + * standard time. * @serial */ private int startTime; @@ -157,9 +157,9 @@ public class SimpleTimeZone extends TimeZone /** * The month in which daylight savings ends. This is one of the - * constants Calendar.JANUARY, ..., Calendar.DECEMBER. + * constants Calendar.JANUARY, ..., Calendar.DECEMBER. * @serial - */ + */ private int endMonth; /** @@ -167,7 +167,7 @@ public class SimpleTimeZone extends TimeZone * It can take the same values as startMode. * @serial * @see #startMode - */ + */ private int endMode; /** @@ -176,19 +176,19 @@ public class SimpleTimeZone extends TimeZone * @see #startMode; */ private int endDay; - + /** - * This variable specifies the day of week the change takes place. If + * This variable specifies the day of week the change takes place. If * endMode == DOM_MODE, this is undefined. * @serial * @see #startMode; */ private int endDayOfWeek; - + /** * This variable specifies the time of change back to standard time. * This time is given in milliseconds after midnight local - * standard time. + * standard time. * @serial */ private int endTime; @@ -210,8 +210,11 @@ public class SimpleTimeZone extends TimeZone * @serial */ private byte[] monthLength = monthArr; - private static final byte[] monthArr = - {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + private static final byte[] monthArr = + { + 31, 28, 31, 30, 31, 30, 31, 31, 30, + 31, 30, 31 + }; /** * The version of the serialized data on the stream. @@ -232,10 +235,9 @@ public class SimpleTimeZone extends TimeZone * When streaming out this class it is always written in the latest * version. * @serial - * @since JDK1.1.4 + * @since JDK1.1.4 */ private int serialVersionOnStream = 2; - private static final long serialVersionUID = -403250971215465050L; /** @@ -257,9 +259,9 @@ public class SimpleTimeZone extends TimeZone /** * Create a <code>SimpleTimeZone</code> with the given time offset - * from GMT and without daylight savings. + * from GMT and without daylight savings. * @param rawOffset the time offset from GMT in milliseconds. - * @param id The identifier of this time zone. + * @param id The identifier of this time zone. */ public SimpleTimeZone(int rawOffset, String id) { @@ -273,7 +275,7 @@ public class SimpleTimeZone extends TimeZone * Create a <code>SimpleTimeZone</code> with the given time offset * from GMT and with daylight savings. The start/end parameters * can have different meaning (replace WEEKDAY with a real day of - * week). Only the first two meanings were supported by earlier + * week). Only the first two meanings were supported by earlier * versions of jdk. * * <dl> @@ -296,12 +298,12 @@ public class SimpleTimeZone extends TimeZone * must make sure that this day lies in the same month. </dd> * </dl> * - * If you give a non existing month, a day that is zero, or too big, + * If you give a non existing month, a day that is zero, or too big, * or a dayOfWeek that is too big, the result is undefined. * * The start rule must have a different month than the end rule. * This restriction shouldn't hurt for all possible time zones. - * + * * @param rawOffset The time offset from GMT in milliseconds. * @param id The identifier of this time zone. * @param startMonth The start month of daylight savings; use the @@ -312,29 +314,26 @@ public class SimpleTimeZone extends TimeZone * @param startTime A time in millis in standard time. * @param endMonth The end month of daylight savings; use the * constants in Calendar. - * @param endday A day in month or a day of week number, as + * @param endday A day in month or a day of week number, as * described above. * @param endDayOfWeek The end rule day of week; see above. * @param endTime A time in millis in standard time. * @throws IllegalArgumentException if parameters are invalid or out of * range. */ - public SimpleTimeZone(int rawOffset, String id, - int startMonth, int startDayOfWeekInMonth, - int startDayOfWeek, int startTime, - int endMonth, int endDayOfWeekInMonth, - int endDayOfWeek, int endTime) + public SimpleTimeZone(int rawOffset, String id, int startMonth, + int startDayOfWeekInMonth, int startDayOfWeek, + int startTime, int endMonth, int endDayOfWeekInMonth, + int endDayOfWeek, int endTime) { this.rawOffset = rawOffset; setID(id); useDaylight = true; - setStartRule(startMonth, startDayOfWeekInMonth, - startDayOfWeek, startTime); + setStartRule(startMonth, startDayOfWeekInMonth, startDayOfWeek, startTime); setEndRule(endMonth, endDayOfWeekInMonth, endDayOfWeek, endTime); if (startMonth == endMonth) - throw new IllegalArgumentException - ("startMonth and endMonth must be different"); + throw new IllegalArgumentException("startMonth and endMonth must be different"); this.startYear = 0; } @@ -347,15 +346,13 @@ public class SimpleTimeZone extends TimeZone * time in milliseconds. This must be positive. * @since 1.2 */ - public SimpleTimeZone(int rawOffset, String id, - int startMonth, int startDayOfWeekInMonth, - int startDayOfWeek, int startTime, - int endMonth, int endDayOfWeekInMonth, - int endDayOfWeek, int endTime, int dstSavings) + public SimpleTimeZone(int rawOffset, String id, int startMonth, + int startDayOfWeekInMonth, int startDayOfWeek, + int startTime, int endMonth, int endDayOfWeekInMonth, + int endDayOfWeek, int endTime, int dstSavings) { - this(rawOffset, id, - startMonth, startDayOfWeekInMonth, startDayOfWeek, startTime, - endMonth, endDayOfWeekInMonth, endDayOfWeek, endTime); + this(rawOffset, id, startMonth, startDayOfWeekInMonth, startDayOfWeek, + startTime, endMonth, endDayOfWeekInMonth, endDayOfWeek, endTime); this.dstSavings = dstSavings; } @@ -376,12 +373,11 @@ public class SimpleTimeZone extends TimeZone * range. * @since 1.4 */ - public SimpleTimeZone(int rawOffset, String id, - int startMonth, int startDayOfWeekInMonth, - int startDayOfWeek, int startTime, int startTimeMode, - int endMonth, int endDayOfWeekInMonth, - int endDayOfWeek, int endTime, int endTimeMode, - int dstSavings) + public SimpleTimeZone(int rawOffset, String id, int startMonth, + int startDayOfWeekInMonth, int startDayOfWeek, + int startTime, int startTimeMode, int endMonth, + int endDayOfWeekInMonth, int endDayOfWeek, + int endTime, int endTimeMode, int dstSavings) { this.rawOffset = rawOffset; setID(id); @@ -394,12 +390,10 @@ public class SimpleTimeZone extends TimeZone this.startTimeMode = startTimeMode; this.endTimeMode = endTimeMode; - setStartRule(startMonth, startDayOfWeekInMonth, - startDayOfWeek, startTime); + setStartRule(startMonth, startDayOfWeekInMonth, startDayOfWeek, startTime); setEndRule(endMonth, endDayOfWeekInMonth, endDayOfWeek, endTime); if (startMonth == endMonth) - throw new IllegalArgumentException - ("startMonth and endMonth must be different"); + throw new IllegalArgumentException("startMonth and endMonth must be different"); this.startYear = 0; this.dstSavings = dstSavings; @@ -432,6 +426,7 @@ public class SimpleTimeZone extends TimeZone { if (month < 0 || month > 11) throw new IllegalArgumentException("month out of range"); + int daysInMonth = getDaysInMonth(month, 1); if (dayOfWeek == 0) { @@ -460,7 +455,6 @@ public class SimpleTimeZone extends TimeZone } } - /** * Sets the daylight savings start rule. You must also set the * end rule with <code>setEndRule</code> or the result of @@ -514,14 +508,16 @@ public class SimpleTimeZone extends TimeZone * @since 1.2 * @see SimpleTimeZone */ - public void setStartRule(int month, int day, int dayOfWeek, int time, boolean after) + public void setStartRule(int month, int day, int dayOfWeek, int time, + boolean after) { // FIXME: XXX: Validate that checkRule and offset processing work with on // or before mode. this.startDay = after ? Math.abs(day) : -Math.abs(day); this.startDayOfWeek = after ? Math.abs(dayOfWeek) : -Math.abs(dayOfWeek); - this.startMode = (dayOfWeek != 0) ? (after ? DOW_GE_DOM_MODE : DOW_LE_DOM_MODE) - : checkRule(month, day, dayOfWeek); + this.startMode = (dayOfWeek != 0) + ? (after ? DOW_GE_DOM_MODE : DOW_LE_DOM_MODE) + : checkRule(month, day, dayOfWeek); this.startDay = Math.abs(this.startDay); this.startDayOfWeek = Math.abs(this.startDayOfWeek); @@ -591,7 +587,7 @@ public class SimpleTimeZone extends TimeZone * * Note that this API isn't incredibly well specified. It appears that the * after flag must override the parameters, since normally, the day and - * dayofweek can select this. I.e., if day < 0 and dayOfWeek < 0, on or + * dayofweek can select this. I.e., if day < 0 and dayOfWeek < 0, on or * before mode is chosen. But if after == true, this implementation * overrides the signs of the other arguments. And if dayOfWeek == 0, it * falls back to the behavior in the other APIs. I guess this should be @@ -606,14 +602,16 @@ public class SimpleTimeZone extends TimeZone * @since 1.2 * @see #setStartRule */ - public void setEndRule(int month, int day, int dayOfWeek, int time, boolean after) + public void setEndRule(int month, int day, int dayOfWeek, int time, + boolean after) { // FIXME: XXX: Validate that checkRule and offset processing work with on // or before mode. this.endDay = after ? Math.abs(day) : -Math.abs(day); this.endDayOfWeek = after ? Math.abs(dayOfWeek) : -Math.abs(dayOfWeek); - this.endMode = (dayOfWeek != 0) ? (after ? DOW_GE_DOM_MODE : DOW_LE_DOM_MODE) - : checkRule(month, day, dayOfWeek); + this.endMode = (dayOfWeek != 0) + ? (after ? DOW_GE_DOM_MODE : DOW_LE_DOM_MODE) + : checkRule(month, day, dayOfWeek); this.endDay = Math.abs(this.endDay); this.endDayOfWeek = Math.abs(endDayOfWeek); @@ -648,7 +646,7 @@ public class SimpleTimeZone extends TimeZone } /** - * Gets the time zone offset, for current date, modified in case of + * Gets the time zone offset, for current date, modified in case of * daylight savings. This is the offset to add to UTC to get the local * time. * @@ -674,8 +672,8 @@ public class SimpleTimeZone extends TimeZone * @return the time zone offset in milliseconds. * @throws IllegalArgumentException if arguments are incorrect. */ - public int getOffset(int era, int year, int month, - int day, int dayOfWeek, int millis) + public int getOffset(int era, int year, int month, int day, int dayOfWeek, + int millis) { int daysInMonth = getDaysInMonth(month, year); if (day < 1 || day > daysInMonth) @@ -683,7 +681,7 @@ public class SimpleTimeZone extends TimeZone if (dayOfWeek < Calendar.SUNDAY || dayOfWeek > Calendar.SATURDAY) throw new IllegalArgumentException("dayOfWeek out of range"); if (month < Calendar.JANUARY || month > Calendar.DECEMBER) - throw new IllegalArgumentException("month out of range"); + throw new IllegalArgumentException("month out of range:" + month); // This method is called by Calendar, so we mustn't use that class. int daylightSavings = 0; @@ -691,27 +689,22 @@ public class SimpleTimeZone extends TimeZone { // This does only work for Gregorian calendars :-( // This is mainly because setStartYear doesn't take an era. - - boolean afterStart = !isBefore(year, month, day, dayOfWeek, millis, - startMode, startMonth, - startDay, startDayOfWeek, startTime); + boolean afterStart = ! isBefore(year, month, day, dayOfWeek, millis, + startMode, startMonth, startDay, + startDayOfWeek, startTime); boolean beforeEnd = isBefore(year, month, day, dayOfWeek, millis + dstSavings, - endMode, endMonth, - endDay, endDayOfWeek, endTime); + endMode, endMonth, endDay, endDayOfWeek, + endTime); if (startMonth < endMonth) - { - // use daylight savings, if the date is after the start of - // savings, and before the end of savings. - daylightSavings = afterStart && beforeEnd ? dstSavings : 0; - } + // use daylight savings, if the date is after the start of + // savings, and before the end of savings. + daylightSavings = afterStart && beforeEnd ? dstSavings : 0; else - { - // use daylight savings, if the date is before the end of - // savings, or after the start of savings. - daylightSavings = beforeEnd || afterStart ? dstSavings : 0; - } + // use daylight savings, if the date is before the end of + // savings, or after the start of savings. + daylightSavings = beforeEnd || afterStart ? dstSavings : 0; } return rawOffset + daylightSavings; } @@ -740,7 +733,7 @@ public class SimpleTimeZone extends TimeZone * milliseconds with respect to standard time. Typically this * is one hour, but for some time zones this may be half an our. * @return the daylight savings offset in milliseconds. - * + * * @since 1.2 */ public int getDSTSavings() @@ -760,7 +753,7 @@ public class SimpleTimeZone extends TimeZone { if (dstSavings <= 0) throw new IllegalArgumentException("illegal value for dstSavings"); - + this.dstSavings = dstSavings; } @@ -774,23 +767,28 @@ public class SimpleTimeZone extends TimeZone } /** - * Returns the number of days in the given month. It does always - * use the Gregorian leap year rule. + * Returns the number of days in the given month. + * Uses gregorian rules prior to 1582 (The default and earliest cutover) * @param month The month, zero based; use one of the Calendar constants. * @param year The year. */ private int getDaysInMonth(int month, int year) { - // Most of this is copied from GregorianCalendar.getActualMaximum() if (month == Calendar.FEBRUARY) { - return ((year & 3) == 0 && (year % 100 != 0 || year % 400 == 0)) - ? 29 : 28; + if ((year & 3) != 0) + return 28; + + // Assume default Gregorian cutover, + // all years prior to this must be Julian + if (year < 1582) + return 29; + + // Gregorian rules + return ((year % 100) != 0 || (year % 400) == 0) ? 29 : 28; } - else if (month < Calendar.AUGUST) - return 31 - (month & 1); else - return 30 + (month & 1); + return monthArr[month]; } /** @@ -804,23 +802,19 @@ public class SimpleTimeZone extends TimeZone * @param mode the change mode; same semantic as startMode. * @param month the change month; same semantic as startMonth. * @param day the change day; same semantic as startDay. - * @param dayOfWeek the change day of week; + * @param dayOfWeek the change day of week; * @param millis the change time in millis since midnight standard time. * same semantic as startDayOfWeek. * @return true, if cal is before the change, false if cal is on * or after the change. */ - private boolean isBefore(int calYear, - int calMonth, int calDayOfMonth, int calDayOfWeek, - int calMillis, int mode, int month, - int day, int dayOfWeek, int millis) + private boolean isBefore(int calYear, int calMonth, int calDayOfMonth, + int calDayOfWeek, int calMillis, int mode, + int month, int day, int dayOfWeek, int millis) { - // This method is called by Calendar, so we mustn't use that class. // We have to do all calculations by hand. - // check the months: - // XXX - this is not correct: // for the DOW_GE_DOM and DOW_LE_DOM modes the change date may // be in a different month. @@ -835,7 +829,7 @@ public class SimpleTimeZone extends TimeZone return calDayOfMonth < day; break; case DOW_IN_MONTH_MODE: - { + { // This computes the day of month of the day of type // "dayOfWeek" that lies in the same (sunday based) week as cal. calDayOfMonth += (dayOfWeek - calDayOfWeek); @@ -844,7 +838,6 @@ public class SimpleTimeZone extends TimeZone // after dividing by 7). If we count from the end of the // month, we get want a -7 based number counting the days from // the end: - if (day < 0) calDayOfMonth -= getDaysInMonth(calMonth, calYear) + 7; else @@ -857,9 +850,9 @@ public class SimpleTimeZone extends TimeZone // 20 21 22 23 24 25 26 -23-22-21-20-19-18-17 // 27 28 29 30 31 32 33 -16-15-14-13-12-11-10 // 34 35 36 -9 -8 -7 - // Now we calculate the day of week in month: int week = calDayOfMonth / 7; + // day > 0 day < 0 // S M T W T F S S M T W T F S // 1 1 1 1 1 1 -5 -5 -4 -4 -4 -4 @@ -867,7 +860,6 @@ public class SimpleTimeZone extends TimeZone // 2 3 3 3 3 3 3 -3 -3 -3 -2 -2 -2 -2 // 3 4 4 4 4 4 4 -2 -2 -2 -1 -1 -1 -1 // 4 5 5 -1 -1 -1 - if (week != day) return week < day; @@ -876,26 +868,25 @@ public class SimpleTimeZone extends TimeZone // daylight savings starts/ends on the given day. break; - } - + } case DOW_LE_DOM_MODE: // The greatest sunday before or equal December, 12 // is the same as smallest sunday after or equal December, 6. day = Math.abs(day) - 6; - case DOW_GE_DOM_MODE: - // Calculate the day of month of the day of type // "dayOfWeek" that lies before (or on) the given date. - calDayOfMonth -= (calDayOfWeek < dayOfWeek ? 7 : 0) - + calDayOfWeek - dayOfWeek; + calDayOfMonth -= (calDayOfWeek < dayOfWeek ? 7 : 0) + calDayOfWeek + - dayOfWeek; if (calDayOfMonth < day) return true; if (calDayOfWeek != dayOfWeek || calDayOfMonth >= day + 7) return false; + // now we have the same day break; } + // the millis decides: return (calMillis < millis); } @@ -914,40 +905,35 @@ public class SimpleTimeZone extends TimeZone /** * Generates the hashCode for the SimpleDateFormat object. It is * the rawOffset, possibly, if useDaylightSavings is true, xored - * with startYear, startMonth, startDayOfWeekInMonth, ..., endTime. + * with startYear, startMonth, startDayOfWeekInMonth, ..., endTime. */ public synchronized int hashCode() { - return rawOffset ^ - (useDaylight ? - startMonth ^ startDay ^ startDayOfWeek ^ startTime - ^ endMonth ^ endDay ^ endDayOfWeek ^ endTime : 0); + return rawOffset + ^ (useDaylight + ? startMonth ^ startDay ^ startDayOfWeek ^ startTime ^ endMonth + ^ endDay ^ endDayOfWeek ^ endTime : 0); } public synchronized boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof SimpleTimeZone)) + if (! (o instanceof SimpleTimeZone)) return false; SimpleTimeZone zone = (SimpleTimeZone) o; - if (zone.hashCode() != hashCode() - || !getID().equals(zone.getID()) - || rawOffset != zone.rawOffset || useDaylight != zone.useDaylight) + if (zone.hashCode() != hashCode() || ! getID().equals(zone.getID()) + || rawOffset != zone.rawOffset || useDaylight != zone.useDaylight) return false; - if (!useDaylight) + if (! useDaylight) return true; - return (startYear == zone.startYear - && startMonth == zone.startMonth - && startDay == zone.startDay - && startDayOfWeek == zone.startDayOfWeek - && startTime == zone.startTime - && startTimeMode == zone.startTimeMode - && endMonth == zone.endMonth - && endDay == zone.endDay - && endDayOfWeek == zone.endDayOfWeek - && endTime == zone.endTime - && endTimeMode == zone.endTimeMode); + return (startYear == zone.startYear && startMonth == zone.startMonth + && startDay == zone.startDay + && startDayOfWeek == zone.startDayOfWeek + && startTime == zone.startTime + && startTimeMode == zone.startTimeMode && endMonth == zone.endMonth + && endDay == zone.endDay && endDayOfWeek == zone.endDayOfWeek + && endTime == zone.endTime && endTimeMode == zone.endTimeMode); } /** @@ -962,25 +948,21 @@ public class SimpleTimeZone extends TimeZone { if (this == other) return true; - if (!(other instanceof SimpleTimeZone)) + if (! (other instanceof SimpleTimeZone)) return false; SimpleTimeZone zone = (SimpleTimeZone) other; - if (zone.hashCode() != hashCode() - || rawOffset != zone.rawOffset || useDaylight != zone.useDaylight) + if (zone.hashCode() != hashCode() || rawOffset != zone.rawOffset + || useDaylight != zone.useDaylight) return false; - if (!useDaylight) + if (! useDaylight) return true; - return (startYear == zone.startYear - && startMonth == zone.startMonth - && startDay == zone.startDay - && startDayOfWeek == zone.startDayOfWeek - && startTime == zone.startTime - && startTimeMode == zone.startTimeMode - && endMonth == zone.endMonth - && endDay == zone.endDay - && endDayOfWeek == zone.endDayOfWeek - && endTime == zone.endTime - && endTimeMode == zone.endTimeMode); + return (startYear == zone.startYear && startMonth == zone.startMonth + && startDay == zone.startDay + && startDayOfWeek == zone.startDayOfWeek + && startTime == zone.startTime + && startTimeMode == zone.startTimeMode && endMonth == zone.endMonth + && endDay == zone.endDay && endDayOfWeek == zone.endDayOfWeek + && endTime == zone.endTime && endTimeMode == zone.endTimeMode); } /** @@ -991,26 +973,17 @@ public class SimpleTimeZone extends TimeZone { // the test for useDaylight is an incompatibility to jdk1.2, but // I think this shouldn't hurt. - return getClass().getName() + "[" - + "id=" + getID() - + ",offset=" + rawOffset - + ",dstSavings=" + dstSavings - + ",useDaylight=" + useDaylight - + (useDaylight ? - ",startYear=" + startYear - + ",startMode=" + startMode - + ",startMonth=" + startMonth - + ",startDay=" + startDay - + ",startDayOfWeek=" + startDayOfWeek - + ",startTime=" + startTime - + ",startTimeMode=" + startTimeMode - + ",endMode=" + endMode - + ",endMonth=" + endMonth - + ",endDay=" + endDay - + ",endDayOfWeek=" + endDayOfWeek - + ",endTime=" + endTime - + ",endTimeMode=" + endTimeMode - : "") + "]"; + return getClass().getName() + "[" + "id=" + getID() + ",offset=" + + rawOffset + ",dstSavings=" + dstSavings + ",useDaylight=" + + useDaylight + + (useDaylight + ? ",startYear=" + startYear + ",startMode=" + startMode + + ",startMonth=" + startMonth + ",startDay=" + startDay + + ",startDayOfWeek=" + startDayOfWeek + ",startTime=" + + startTime + ",startTimeMode=" + startTimeMode + ",endMode=" + + endMode + ",endMonth=" + endMonth + ",endDay=" + endDay + + ",endDayOfWeek=" + endDayOfWeek + ",endTime=" + endTime + + ",endTimeMode=" + endTimeMode : "") + "]"; } /** @@ -1029,7 +1002,8 @@ public class SimpleTimeZone extends TimeZone startMode = DOW_IN_MONTH_MODE; startTimeMode = WALL_TIME; endTimeMode = WALL_TIME; - serialVersionOnStream = 2; } + serialVersionOnStream = 2; + } else { int length = input.readInt(); @@ -1054,29 +1028,31 @@ public class SimpleTimeZone extends TimeZone * <code>start/endDay(OfWeek)</code>-Fields are written in the * DOW_IN_MONTH_MODE rule, since this was the only supported rule * in 1.1. - * + * * In the optional section, we write first the length of an byte * array as int and afterwards the byte array itself. The byte * array contains in this release four elements, namely the real * startDay, startDayOfWeek endDay, endDayOfWeek in that Order. * These fields are needed, because for compatibility reasons only * approximative values are written to the required section, as - * described above. + * described above. */ private void writeObject(java.io.ObjectOutputStream output) throws java.io.IOException { byte[] byteArray = new byte[] - { - (byte) startDay, (byte) startDayOfWeek, - (byte) endDay, (byte) endDayOfWeek}; + { + (byte) startDay, (byte) startDayOfWeek, (byte) endDay, + (byte) endDayOfWeek + }; /* calculate the approximation for JDK 1.1 */ switch (startMode) { case DOM_MODE: - startDayOfWeek = Calendar.SUNDAY; // random day of week - // fall through + startDayOfWeek = Calendar.SUNDAY; // random day of week + + // fall through case DOW_GE_DOM_MODE: case DOW_LE_DOM_MODE: startDay = (startDay + 6) / 7; @@ -1085,7 +1061,8 @@ public class SimpleTimeZone extends TimeZone { case DOM_MODE: endDayOfWeek = Calendar.SUNDAY; - // fall through + + // fall through case DOW_GE_DOM_MODE: case DOW_LE_DOM_MODE: endDay = (endDay + 6) / 7; |