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();
  }
}

Attachment: signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil

Reply via email to