There is a small problem in the GregorianCalendar when setting the firstDayOfWeek. The attached test program demonstrates the problem. The attached patch fixes it. I will convert the testprogram into a Mauve test.
2006-03-25 Roman Kennke <[EMAIL PROTECTED]>
* java/util/GregorianCalender.java
(computeTime): Fix comparison to correctly calculate the
calendar.
/Roman
--
“Improvement makes straight roads, but the crooked roads, without
Improvement, are roads of Genius.” - William Blake
Index: java/util/GregorianCalendar.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/util/GregorianCalendar.java,v
retrieving revision 1.43
diff -u -1 -0 -r1.43 GregorianCalendar.java
--- java/util/GregorianCalendar.java 1 Oct 2005 19:45:23 -0000 1.43
+++ java/util/GregorianCalendar.java 25 Mar 2006 11:03:48 -0000
@@ -581,21 +581,21 @@
if (daysInFirstWeek <= 0)
daysInFirstWeek += 7;
if (daysInFirstWeek < getMinimalDaysInFirstWeek())
offs += daysInFirstWeek;
else
offs -= 7 - daysInFirstWeek;
day = offs + 7 * (fields[WEEK_OF_MONTH] - 1);
offs = fields[DAY_OF_WEEK] - getFirstDayOfWeek();
- if (offs <= 0)
+ if (offs < 0)
offs += 7;
day += offs;
}
}
// 1: YEAR + MONTH + DAY_OF_MONTH
}
if (era == BC && year > 0)
year = 1 - year;
import java.util.*;
public class CalendarDayOfWeekTest {
public static void main(String[] a) {
Locale.setDefault(Locale.GERMANY);
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
System.out.println(calendar.getTime() + " (KW " + calendar.get(Calendar.WEEK_OF_YEAR) + ")");
System.out.println("Setting the day of week to monday...");
System.out.println();
for (int day = 1; day <= 31; day++) {
calendar.set(2006, Calendar.MARCH, day);
System.out.print("KW " + calendar.get(Calendar.WEEK_OF_YEAR) + ": ");
System.out.print(calendar.getTime() + " (KW " + calendar.get(Calendar.WEEK_OF_YEAR) + ") -> ");
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(calendar.getTime() + " (KW " + calendar.get(Calendar.WEEK_OF_YEAR) + ")");
}
System.out.println();
}
}
signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil
