Understanding java.util.Calendar WEEK_OF_YEAR

calendar, datetime, java

Solution

From java.util.Calendar javadoc:

First Week

Calendar defines a locale-specific seven day week using two parameters: the first day of the week and the minimal days in first week (from 1 to 7). These numbers are taken from the locale resource data when a Calendar is constructed. They may also be specified explicitly through the methods for setting their values.

When setting or getting the WEEK_OF_MONTH or WEEK_OF_YEAR fields, Calendar must determine the first week of the month or year as a reference point. The first week of a month or year is defined as the earliest seven day period beginning on getFirstDayOfWeek() and containing at least getMinimalDaysInFirstWeek() days of that month or year. Weeks numbered ..., -1, 0 precede the first week; weeks numbered 2, 3,... follow it. Note that the normalized numbering returned by get() may be different. For example, a specific Calendar subclass may designate the week before week 1 of a year as week n of the previous year.

So it's locale-specific. In your case, if the week contains days from new year, it is counted as week 1 from the new year.

You can change this behavior by using Calendar#setMinimalDaysInFirstWeek(int).

Problem

I'm trying to understand how `java.util.Calendar.get(java.util.Calendar.WEEK_OF_YEAR)` works, but it seems that I'm missing some points. ``` String time = "1998-12-31"; // year month day java.util.Calendar date = java.util.Calendar.getInstance(); date.setTime((new java.text.SimpleDateFormat("yyyy-MM-dd")).parse(time)); System.err.println("Week of year = " + date.get(java.util.Calendar.WEEK_OF_YEAR)); // Week of year = 1 Why ??? ``` Why `date.get(java.util.Calendar.WEEK_OF_YEAR)` returns 1 for the last week of the year? Moreover, `WEEK_OF_YEAR` for `"1998-01-01"` is 1 and for `"1998-12-23"` it is 52. Does anybody have an explanation for this behavior?

Original source

Related problems