Calendar Question - maybe bug ?
Panagiotis Astithas
past at ebs.gr
Tue May 30 06:54:26 PDT 2006
Heiko Weber wrote:
> Am Dienstag, 30. Mai 2006 10:00 schrieb Heiko Weber:
>> Am Dienstag, 30. Mai 2006 08:19 schrieb Panagiotis Astithas:
>>> Heiko Weber wrote:
>>>> Hi !
>>>>
>>>> I've a problem with GregorianCalendar, which returns different weeks
>>>> (in year) on FreeBSD 6.1, java version is
>>>>
>>>> # java -version
>>>> Java HotSpot(TM) Server VM (build 1.5.0-p2-heiko_03_jan_2006_23_51,
>>>> mixed mode)
>>>>
>>>> Test program (A.java):
>>>>
>>>> import java.util.Calendar;
>>>> import java.util.GregorianCalendar;
>>>>
>>>> public class A {
>>>> public static int weeksInYear(int year) {
>>>> Calendar cal = GregorianCalendar.getInstance();
>>>>
>>>> cal.set(year, 11, 31);
>>>>
>>>> return cal.get(Calendar.WEEK_OF_YEAR) == 53 ? 53 : 52;
>>>> }
>>>>
>>>> public static void main(String args[]) {
>>>> for (int i = 1990; i <= 2006; i++)
>>>> System.out.println("Weeks in Year " + i + " = "
>>>> + weeksInYear(i));
>>>> }
>>>> }
>>>>
>>>> Output on a Linux or Windows JRE is:
>>>>
>>>> Weeks in Year 1990 = 52
>>>> Weeks in Year 1991 = 52
>>>> Weeks in Year 1992 = 53
>>>> Weeks in Year 1993 = 52
>>>> Weeks in Year 1994 = 52
>>>> Weeks in Year 1995 = 52
>>>> Weeks in Year 1996 = 52
>>>> Weeks in Year 1997 = 52
>>>> Weeks in Year 1998 = 53
>>>> Weeks in Year 1999 = 52
>>>> Weeks in Year 2000 = 52
>>>> Weeks in Year 2001 = 52
>>>> Weeks in Year 2002 = 52
>>>> Weeks in Year 2003 = 52
>>>> Weeks in Year 2004 = 53
>>>> Weeks in Year 2005 = 52
>>>> Weeks in Year 2006 = 52
>>>>
>>>> Output on FreeBSD is:
>>>>
>>>> Weeks in Year 1990 = 52
>>>> Weeks in Year 1991 = 52
>>>> Weeks in Year 1992 = 52
>>>> Weeks in Year 1993 = 52
>>>> Weeks in Year 1994 = 53
>>>> Weeks in Year 1995 = 52
>>>> Weeks in Year 1996 = 52
>>>> Weeks in Year 1997 = 52
>>>> Weeks in Year 1998 = 52
>>>> Weeks in Year 1999 = 52
>>>> Weeks in Year 2000 = 52
>>>> Weeks in Year 2001 = 52
>>>> Weeks in Year 2002 = 52
>>>> Weeks in Year 2003 = 52
>>>> Weeks in Year 2004 = 52
>>>> Weeks in Year 2005 = 53
>>>> Weeks in Year 2006 = 52
>>>>
>>>> Is this my fault or would it help to update the FreeBSD JRE ? Or is the
>>>> java-Calendar-System build up on some local (changeable) settings ?
>>>>
>>>> Thanks for any help or hint.
>>> I can't replicate this here on either diablo-jdk15 or jdk15 patchset 2
>>> (as yours). Is your systems time/timezone/etc. correct?
>> Hm, /etc/localtime has been installed last year in september - from
>> installation of FreeBSD 6.0. If I remember correct I used sysinstall and
>> answered "cmos time == local time".
>>
>> # date
>> Tue May 30 09:48:36 CEST 2006
>>
>> Is this ok for germany ?
>>
>> At the moment I compile jdk with patchset 3 on an other FreeBSD system to
>> verify ... there I can play with the timezone settings after installation.
>>
>
> Ah, got some light:
>
> if I change
>
> Calendar cal = GregorianCalendar.getInstance();
>
> to
>
> Calendar cal = new GregorianCalendar(
> TimeZone.getTimeZone("CEST"), new Locale("DE"));
>
> I get better results:
>
> 31.12.1990 is week #1 / year 1990 has 52 weeks
> 31.12.1991 is week #1 / year 1991 has 52 weeks
> 31.12.1992 is week #53 / year 1992 has 53 weeks
> 31.12.1993 is week #52 / year 1993 has 52 weeks
> 31.12.1994 is week #52 / year 1994 has 52 weeks
> 31.12.1995 is week #52 / year 1995 has 52 weeks
> 31.12.1996 is week #1 / year 1996 has 52 weeks
> 31.12.1997 is week #1 / year 1997 has 52 weeks
> 31.12.1998 is week #53 / year 1998 has 53 weeks
> 31.12.1999 is week #52 / year 1999 has 52 weeks
> 31.12.2000 is week #52 / year 2000 has 52 weeks
> 31.12.2001 is week #1 / year 2001 has 52 weeks
> 31.12.2002 is week #1 / year 2002 has 52 weeks
> 31.12.2003 is week #1 / year 2003 has 52 weeks
> 31.12.2004 is week #53 / year 2004 has 53 weeks
> 31.12.2005 is week #52 / year 2005 has 52 weeks
> 31.12.2006 is week #52 / year 2006 has 52 weeks
>
> Maybe there is a problem getting the "default" Locale and/or Timezone.
>
> I changed the line to
>
> Calendar cal = new GregorianCalendar(TimeZone.getDefault(), new Locale("DE"));
>
> looks good - results are ok. And
>
> Calendar cal = new GregorianCalendar(
> TimeZone.getTimeZone("CEST"), Locale.getDefault());
>
> Looks bad, problem is the default Locale. But how to fix this in FreeBSD, is
> there a file in /etc/ which contains a default ? "locale" reports:
>
> # locale
> LANG=
> LC_CTYPE="C"
> LC_COLLATE="C"
> LC_TIME="C"
> LC_NUMERIC="C"
> LC_MONETARY="C"
> LC_MESSAGES="C"
> LC_ALL=
>
> with
>
> # setenv LANG de_DE.ISO8859-1
>
> this could be fixed - and my test program works ! Now looking for a good place
> where to set "LANG" system wide ...
Right, using the same locale settings on Linux gives the same results as
FreeBSD. The best place to set LANG would be /etc/login.conf, unless you
have other requirements.
Cheers,
Panagiotis
More information about the freebsd-java
mailing list