Commit 2140214f by Jerry Quinn Committed by Jerry Quinn

re PR libgcj/8321 (SimpleTimeZone doesn't work properly for daylight saving time.)

2004-05-26  Jerry Quinn  <jlquinn@optonline.net>

	PR libgcj/8321
	* java/util/SimpleTimeZone.java (serialVersionOnStream): Bump to 2.
	(setStartRule,setEndRule): Don't take abs of day number.
	(getOffset): Clarify docs.  Add argument checks.
	(isBefore): Take abs of day number in DOW_LE_DOM_MODE.
	(equals,hasSameRules,toString,readObject): Use startTimeMode and
	endTimeMode.
	* testsuite/libjava.mauve/xfails
	(gnu.testlet.java.util.SimpleTimeZone.check12): XFAIL test 22.

From-SVN: r82310
parent 67d060c4
2004-05-26 Jerry Quinn <jlquinn@optonline.net>
PR libgcj/8321
* java/util/SimpleTimeZone.java (serialVersionOnStream): Bump to 2.
(setStartRule,setEndRule): Don't take abs of day number.
(getOffset): Clarify docs. Add argument checks.
(isBefore): Take abs of day number in DOW_LE_DOM_MODE.
(equals,hasSameRules,toString,readObject): Use startTimeMode and
endTimeMode.
* testsuite/libjava.mauve/xfails
(gnu.testlet.java.util.SimpleTimeZone.check12): XFAIL test 22.
2004-05-21 Bryce McKinlay <mckinlay@redhat.com> 2004-05-21 Bryce McKinlay <mckinlay@redhat.com>
Layout interfaces during preparation, not initialization. Layout interfaces during preparation, not initialization.
......
...@@ -234,7 +234,7 @@ public class SimpleTimeZone extends TimeZone ...@@ -234,7 +234,7 @@ public class SimpleTimeZone extends TimeZone
* @serial * @serial
* @since JDK1.1.4 * @since JDK1.1.4
*/ */
private int serialVersionOnStream = 1; private int serialVersionOnStream = 2;
private static final long serialVersionUID = -403250971215465050L; private static final long serialVersionUID = -403250971215465050L;
...@@ -477,9 +477,7 @@ public class SimpleTimeZone extends TimeZone ...@@ -477,9 +477,7 @@ public class SimpleTimeZone extends TimeZone
{ {
this.startMode = checkRule(month, day, dayOfWeek); this.startMode = checkRule(month, day, dayOfWeek);
this.startMonth = month; this.startMonth = month;
// FIXME: XXX: JDK 1.2 allows negative values and has 2 new variations this.startDay = day;
// of this method.
this.startDay = Math.abs(day);
this.startDayOfWeek = Math.abs(dayOfWeek); this.startDayOfWeek = Math.abs(dayOfWeek);
if (this.startTimeMode == WALL_TIME || this.startTimeMode == STANDARD_TIME) if (this.startTimeMode == WALL_TIME || this.startTimeMode == STANDARD_TIME)
this.startTime = time; this.startTime = time;
...@@ -570,9 +568,7 @@ public class SimpleTimeZone extends TimeZone ...@@ -570,9 +568,7 @@ public class SimpleTimeZone extends TimeZone
{ {
this.endMode = checkRule(month, day, dayOfWeek); this.endMode = checkRule(month, day, dayOfWeek);
this.endMonth = month; this.endMonth = month;
// FIXME: XXX: JDK 1.2 allows negative values and has 2 new variations this.endDay = day;
// of this method.
this.endDay = Math.abs(day);
this.endDayOfWeek = Math.abs(dayOfWeek); this.endDayOfWeek = Math.abs(dayOfWeek);
if (this.endTimeMode == WALL_TIME) if (this.endTimeMode == WALL_TIME)
this.endTime = time; this.endTime = time;
...@@ -660,21 +656,33 @@ public class SimpleTimeZone extends TimeZone ...@@ -660,21 +656,33 @@ public class SimpleTimeZone extends TimeZone
* <code>offset = cal.get(Calendar.ZONE_OFFSET) * <code>offset = cal.get(Calendar.ZONE_OFFSET)
* + cal.get(Calendar.DST_OFFSET);</code> * + cal.get(Calendar.DST_OFFSET);</code>
* *
* You could also use in
*
* This version doesn't suffer this inaccuracy. * This version doesn't suffer this inaccuracy.
* *
* The arguments don't follow the approach for setting start and end rules.
* The day must be a positive number and dayOfWeek must be a positive value
* from Calendar. dayOfWeek is redundant, but must match the other values
* or an inaccurate result may be returned.
*
* @param era the era of the given date * @param era the era of the given date
* @param year the year of the given date * @param year the year of the given date
* @param month the month of the given date, 0 for January. * @param month the month of the given date, 0 for January.
* @param day the day of month * @param day the day of month
* @param dayOfWeek the day of week; this must be matching the * @param dayOfWeek the day of week; this must match the other fields.
* other fields.
* @param millis the millis in the day (in local standard time) * @param millis the millis in the day (in local standard time)
* @return the time zone offset in milliseconds. */ * @return the time zone offset in milliseconds.
* @throws IllegalArgumentException if arguments are incorrect.
*/
public int getOffset(int era, int year, int month, public int getOffset(int era, int year, int month,
int day, int dayOfWeek, int millis) int day, int dayOfWeek, int millis)
{ {
int daysInMonth = getDaysInMonth(month, 1);
if (day < 1 || day > daysInMonth)
throw new IllegalArgumentException("day out of range");
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");
// This method is called by Calendar, so we mustn't use that class. // This method is called by Calendar, so we mustn't use that class.
int daylightSavings = 0; int daylightSavings = 0;
if (useDaylight && era == GregorianCalendar.AD && year >= startYear) if (useDaylight && era == GregorianCalendar.AD && year >= startYear)
...@@ -785,7 +793,7 @@ public class SimpleTimeZone extends TimeZone ...@@ -785,7 +793,7 @@ public class SimpleTimeZone extends TimeZone
/** /**
* Checks if the date given in calXXXX, is before the change between * Checks if the date given in calXXXX, is before the change between
* dst and standard time. * dst and standard time.
* @param calYear the year of the date to check (for leap day cheking). * @param calYear the year of the date to check (for leap day checking).
* @param calMonth the month of the date to check. * @param calMonth the month of the date to check.
* @param calDay the day of month of the date to check. * @param calDay the day of month of the date to check.
* @param calDayOfWeek the day of week of the date to check. * @param calDayOfWeek the day of week of the date to check.
...@@ -870,7 +878,7 @@ public class SimpleTimeZone extends TimeZone ...@@ -870,7 +878,7 @@ public class SimpleTimeZone extends TimeZone
case DOW_LE_DOM_MODE: case DOW_LE_DOM_MODE:
// The greatest sunday before or equal December, 12 // The greatest sunday before or equal December, 12
// is the same as smallest sunday after or equal December, 6. // is the same as smallest sunday after or equal December, 6.
day -= 6; day = Math.abs(day) - 6;
case DOW_GE_DOM_MODE: case DOW_GE_DOM_MODE:
...@@ -931,10 +939,12 @@ public class SimpleTimeZone extends TimeZone ...@@ -931,10 +939,12 @@ public class SimpleTimeZone extends TimeZone
&& startDay == zone.startDay && startDay == zone.startDay
&& startDayOfWeek == zone.startDayOfWeek && startDayOfWeek == zone.startDayOfWeek
&& startTime == zone.startTime && startTime == zone.startTime
&& startTimeMode == zone.startTimeMode
&& endMonth == zone.endMonth && endMonth == zone.endMonth
&& endDay == zone.endDay && endDay == zone.endDay
&& endDayOfWeek == zone.endDayOfWeek && endDayOfWeek == zone.endDayOfWeek
&& endTime == zone.endTime); && endTime == zone.endTime
&& endTimeMode == zone.endTimeMode);
} }
/** /**
...@@ -962,9 +972,12 @@ public class SimpleTimeZone extends TimeZone ...@@ -962,9 +972,12 @@ public class SimpleTimeZone extends TimeZone
&& startDay == zone.startDay && startDay == zone.startDay
&& startDayOfWeek == zone.startDayOfWeek && startDayOfWeek == zone.startDayOfWeek
&& startTime == zone.startTime && startTime == zone.startTime
&& startTimeMode == zone.startTimeMode
&& endMonth == zone.endMonth && endMonth == zone.endMonth
&& endDay == zone.endDay && endDay == zone.endDay
&& endDayOfWeek == zone.endDayOfWeek && endTime == zone.endTime); && endDayOfWeek == zone.endDayOfWeek
&& endTime == zone.endTime
&& endTimeMode == zone.endTimeMode);
} }
/** /**
...@@ -987,11 +1000,14 @@ public class SimpleTimeZone extends TimeZone ...@@ -987,11 +1000,14 @@ public class SimpleTimeZone extends TimeZone
+ ",startDay=" + startDay + ",startDay=" + startDay
+ ",startDayOfWeek=" + startDayOfWeek + ",startDayOfWeek=" + startDayOfWeek
+ ",startTime=" + startTime + ",startTime=" + startTime
+ ",startTimeMode=" + startTimeMode
+ ",endMode=" + endMode + ",endMode=" + endMode
+ ",endMonth=" + endMonth + ",endMonth=" + endMonth
+ ",endDay=" + endDay + ",endDay=" + endDay
+ ",endDayOfWeek=" + endDayOfWeek + ",endDayOfWeek=" + endDayOfWeek
+ ",endTime=" + endTime : "") + "]"; + ",endTime=" + endTime
+ ",endTimeMode=" + endTimeMode
: "") + "]";
} }
/** /**
...@@ -1008,7 +1024,9 @@ public class SimpleTimeZone extends TimeZone ...@@ -1008,7 +1024,9 @@ public class SimpleTimeZone extends TimeZone
dstSavings = 60 * 60 * 1000; dstSavings = 60 * 60 * 1000;
endMode = DOW_IN_MONTH_MODE; endMode = DOW_IN_MONTH_MODE;
startMode = DOW_IN_MONTH_MODE; startMode = DOW_IN_MONTH_MODE;
serialVersionOnStream = 1; startTimeMode = WALL_TIME;
endTimeMode = WALL_TIME;
serialVersionOnStream = 2;
} }
else else
{ {
......
...@@ -140,3 +140,4 @@ FAIL: gnu.testlet.java.net.URLConnection.URLConnectionTest: Error in test_getHea ...@@ -140,3 +140,4 @@ FAIL: gnu.testlet.java.net.URLConnection.URLConnectionTest: Error in test_getHea
FAIL: gnu.testlet.java.net.URL.URLTest: openStream (number 1) FAIL: gnu.testlet.java.net.URL.URLTest: openStream (number 1)
FAIL: gnu.testlet.java.net.URL.URLTest: Error in test_toString - 5 exception should not be thrown here (number 1) FAIL: gnu.testlet.java.net.URL.URLTest: Error in test_toString - 5 exception should not be thrown here (number 1)
FAIL: gnu.testlet.java.net.MulticastSocket.MulticastSocketTest: joinGroup() twice. (number 1) FAIL: gnu.testlet.java.net.MulticastSocket.MulticastSocketTest: joinGroup() twice. (number 1)
FAIL: gnu.testlet.java.util.SimpleTimeZone.check12 (number 22)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment