You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by hi...@apache.org on 2007/01/16 16:25:48 UTC
svn commit: r496726 - in /harmony/enhanced/classlib/trunk/modules/luni/src:
main/java/java/util/GregorianCalendar.java
test/java/tests/api/java/util/GregorianCalendarTest.java
Author: hindessm
Date: Tue Jan 16 07:25:47 2007
New Revision: 496726
URL: http://svn.apache.org/viewvc?view=rev&rev=496726
Log:
Applying patches from "[#HARMONY-3003]
[classlib][luni]GregorianCalendar.get(Calendar.DAY_OF_MONTH) and
get(Calendar.MONTH) return incorrect value".
Modified:
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/GregorianCalendar.java
harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/util/GregorianCalendarTest.java
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/GregorianCalendar.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/GregorianCalendar.java?view=diff&rev=496726&r1=496725&r2=496726
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/GregorianCalendar.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/GregorianCalendar.java Tue Jan 16 07:25:47 2007
@@ -328,6 +328,9 @@
int dayOfYear = computeYearAndDay(days, timeVal + zoneOffset);
fields[DAY_OF_YEAR] = dayOfYear;
+ if(fields[YEAR] == changeYear && gregorianCutover < timeVal + zoneOffset){
+ dayOfYear += currentYearSkew;
+ }
int month = dayOfYear / 32;
boolean leapYear = isLeapYear(fields[YEAR]);
int date = dayOfYear - daysInYear(leapYear, month);
@@ -356,6 +359,9 @@
dayOfYear = computeYearAndDay(days, timeVal - zoneOffset
+ dstOffset);
fields[DAY_OF_YEAR] = dayOfYear;
+ if(fields[YEAR] == changeYear && gregorianCutover < timeVal - zoneOffset + dstOffset){
+ dayOfYear += currentYearSkew;
+ }
month = dayOfYear / 32;
leapYear = isLeapYear(fields[YEAR]);
date = dayOfYear - daysInYear(leapYear, month);
@@ -774,7 +780,13 @@
if (year > changeYear) {
days -= ((year - 1901) / 100) - ((year - 1601) / 400);
} else {
- days += julianSkew;
+ if(year == changeYear){
+ days += currentYearSkew;
+ }else if(year == changeYear -1){
+ days += lastYearSkew;
+ }else{
+ days += julianSkew;
+ }
}
return days;
} else if (year <= changeYear) {
@@ -782,9 +794,8 @@
}
return (year - 1970) * 365 + ((year - 1972) / 4)
- ((year - 2000) / 100) + ((year - 2000) / 400);
-
}
-
+
private int daysInMonth() {
return daysInMonth(isLeapYear(fields[YEAR]), fields[MONTH]);
}
@@ -1216,8 +1227,8 @@
isCached = false;
int dayOfYear = cal.get(DAY_OF_YEAR);
if (dayOfYear < julianSkew) {
- currentYearSkew = dayOfYear;
- lastYearSkew = julianSkew - dayOfYear;
+ currentYearSkew = dayOfYear-1;
+ lastYearSkew = julianSkew - dayOfYear + 1;
} else {
lastYearSkew = 0;
currentYearSkew = julianSkew;
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/util/GregorianCalendarTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/util/GregorianCalendarTest.java?view=diff&rev=496726&r1=496725&r2=496726
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/util/GregorianCalendarTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/util/GregorianCalendarTest.java Tue Jan 16 07:25:47 2007
@@ -642,6 +642,14 @@
gc.setGregorianChange(date);
gc.setTimeInMillis(Date.parse("Dec 24 00:00:01 GMT 2000"));
assertEquals(346, gc.get(Calendar.DAY_OF_YEAR));
+
+ // Regression test for Harmony-3003
+ date = new Date(Date.parse("Feb 28 00:00:01 GMT 2000"));
+ gc = new GregorianCalendar();
+ gc.setGregorianChange(date);
+ gc.setTimeInMillis(Date.parse("Dec 1 00:00:01 GMT 2000"));
+ assertEquals(1, gc.get(Calendar.DAY_OF_MONTH));
+ assertEquals(11, gc.get(Calendar.MONTH));
}
/**