PatchSet 5544 Date: 2005/02/14 21:36:01 Author: robilad Branch: HEAD Tag: (none) Log: Resynced with GNU Classpath: Calendaring fixes from Sven
2005-02-14 Dalibor Topic <[EMAIL PROTECTED]> Resynced with GNU Classpath. 2005-02-14 Sven de Marothy <[EMAIL PROTECTED]> * java/util/Calendar.java (Calendar): Constructor should clear fields. 2005-02-14 Sven de Marothy <[EMAIL PROTECTED]> * 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. Members: ChangeLog:1.3588->1.3589 libraries/javalib/java/util/Calendar.java:1.32->1.33 libraries/javalib/java/util/GregorianCalendar.java:1.35->1.36 Index: kaffe/ChangeLog diff -u kaffe/ChangeLog:1.3588 kaffe/ChangeLog:1.3589 --- kaffe/ChangeLog:1.3588 Mon Feb 14 21:19:57 2005 +++ kaffe/ChangeLog Mon Feb 14 21:36:01 2005 @@ -2,6 +2,24 @@ Resynced with GNU Classpath. + 2005-02-14 Sven de Marothy <[EMAIL PROTECTED]> + + * java/util/Calendar.java + (Calendar): Constructor should clear fields. + + 2005-02-14 Sven de Marothy <[EMAIL PROTECTED]> + + * 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-14 Dalibor Topic <[EMAIL PROTECTED]> + + Resynced with GNU Classpath. + 2005-02-13 Mark Wielaard <[EMAIL PROTECTED]> * java/awt/AWTKeyStroke.java (getAWTKeyStroke(String)): Throw Index: kaffe/libraries/javalib/java/util/Calendar.java diff -u kaffe/libraries/javalib/java/util/Calendar.java:1.32 kaffe/libraries/javalib/java/util/Calendar.java:1.33 --- kaffe/libraries/javalib/java/util/Calendar.java:1.32 Sat Feb 5 20:36:29 2005 +++ kaffe/libraries/javalib/java/util/Calendar.java Mon Feb 14 21:36:06 2005 @@ -454,6 +454,7 @@ firstDayOfWeek = ((Integer) rb.getObject("firstDayOfWeek")).intValue(); minimalDaysInFirstWeek = ((Integer) rb.getObject("minimalDaysInFirstWeek")) .intValue(); + clear(); } /** @@ -828,16 +829,10 @@ isTimeSet = false; areFieldsSet = false; int zoneOffs = zone.getRawOffset(); - - int hour = zoneOffs / (60 * 60 * 1000); - int minute = (zoneOffs - 60 * 60 * 1000 * hour) / (60 * 1000); - int seconds = (zoneOffs - 60 * 60 * 1000 * hour - 60 * 1000 * minute) / 1000; - int millis = zoneOffs - 60 * 60 * 1000 * hour - 60 * 1000 * minute - - seconds * 1000; int[] tempFields = { - 1, 1970, JANUARY, 1, 1, 1, 1, THURSDAY, 1, AM, hour, - hour, minute, seconds, millis, zoneOffs, 0 + 1, 1970, JANUARY, 1, 1, 1, 1, THURSDAY, 1, AM, 0, 0, 0, + 0, 0, zoneOffs, 0 }; fields = tempFields; for (int i = 0; i < FIELD_COUNT; i++) Index: kaffe/libraries/javalib/java/util/GregorianCalendar.java diff -u kaffe/libraries/javalib/java/util/GregorianCalendar.java:1.35 kaffe/libraries/javalib/java/util/GregorianCalendar.java:1.36 --- kaffe/libraries/javalib/java/util/GregorianCalendar.java:1.35 Sat Feb 5 20:36:29 2005 +++ kaffe/libraries/javalib/java/util/GregorianCalendar.java Mon Feb 14 21:36:06 2005 @@ -369,8 +369,25 @@ private int getFirstDayOfMonth(int year, int month) { int[] dayCount = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; - int dayOfYear = dayCount[month] + 1; + if (month > 11) + { + year += (month / 12); + month = month % 12; + } + + if (month < 0) + { + year += (int) month / 12; + month = month % 12; + if (month < 0) + { + month += 12; + year--; + } + } + + int dayOfYear = dayCount[month] + 1; if (month > 1) if (isLeapYear(year)) dayOfYear++; @@ -508,22 +525,28 @@ if (! isLenient()) nonLeniencyCheck(); - if (! isSet[MONTH]) + if (! isSet[MONTH] && (! isSet[DAY_OF_WEEK] || isSet[WEEK_OF_YEAR])) { // 5: YEAR + DAY_OF_WEEK + WEEK_OF_YEAR - if (isSet[DAY_OF_WEEK] || isSet[WEEK_OF_YEAR]) + if (isSet[WEEK_OF_YEAR]) { int first = getFirstDayOfMonth(year, 0); - int offs; - if ((8 - first) >= getMinimalDaysInFirstWeek()) - // start counting on first week - offs = 1; - else - offs = 1 + (8 - first); + int offs = 1; + int daysInFirstWeek = getFirstDayOfWeek() - first; + if (daysInFirstWeek <= 0) + daysInFirstWeek += 7; + if (daysInFirstWeek < getMinimalDaysInFirstWeek()) + offs += daysInFirstWeek; + else + offs -= 7 - daysInFirstWeek; month = 0; day = offs + 7 * (fields[WEEK_OF_YEAR] - 1); - day += fields[DAY_OF_WEEK] - first; + offs = fields[DAY_OF_WEEK] - getFirstDayOfWeek(); + + if (offs < 0) + offs += 7; + day += offs; } else { @@ -549,8 +572,21 @@ } else { // 2: YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK - day = 1 + 7 * (fields[WEEK_OF_MONTH] - 1); - day += fields[DAY_OF_WEEK] - first; + int offs = 1; + int daysInFirstWeek = getFirstDayOfWeek() - first; + 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) + offs += 7; + day += offs; } } _______________________________________________ kaffe mailing list kaffe@kaffe.org http://kaffe.org/cgi-bin/mailman/listinfo/kaffe