Calendar Question - maybe bug ?

Heiko Weber java at wecos.de
Tue May 30 04:23:31 PDT 2006


Am Dienstag, 30. Mai 2006 12:10 schrieb Achilleus Mantzios:
> O Heiko Weber έγραψε στις May 30, 2006 :
> > 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 ?
>
> I think yes, it means Central European Time (CET) with saylight savings
> (S).
>
> Applying
> --- A.java.old  Tue May 30 12:57:28 2006
> +++ A.java      Tue May 30 12:57:37 2006
> @@ -11,6 +11,7 @@
>           }
>
>           public static void main(String args[]) {
> +                java.util.TimeZone.setDefault(null);
>                   for (int i = 1990; i <= 2006; i++)
>                           System.out.println("Weeks in Year " + i + " = "
> + weeksInYear(i));
>           }
>
> Should give you a hint of whether the problem is TZ related.
>
> P.S.
> Also with 1.4.2 I get the first result set.

Hi Achilleus,

the above "patch" makes no difference on my system.

I compared /etc/localtime with the files in /usr/share/zoneinfo, it 
is /usr/shared/zoneinfo/Europe/Berlin.

Heiko


More information about the freebsd-java mailing list