简体   繁体   English

calendar.getActualMaximum(Calendar.WEEK_OF_YEAR)在第1-11个月返回52,在第12个月返回53

[英]calendar.getActualMaximum(Calendar.WEEK_OF_YEAR) returns 52 for months 1-11 and returns 53 for month 12

I am using calendar.getActualMaximum(Calendar.WEEK_OF_YEAR) to get total number of weeks in a given year. 我使用calendar.getActualMaximum(Calendar.WEEK_OF_YEAR)来获取给定年份的总周数。 This is the function I am using : 这是我正在使用的功能:

public static void main(String[] args) {

    for(int i=2012; i<=2016; i++) {
        System.out.println("Year : " + i + ", Total Weeks : " + getNumWeeksForYear(i));
    }

}
public static int getNumWeeksForYear(int year) {  
    Calendar c = Calendar.getInstance();           
    c.set(year, 12, 31); //issue
    c.setFirstDayOfWeek(Calendar.MONDAY );
    return c.getActualMaximum(Calendar.WEEK_OF_YEAR);   
}
Output with c.set(year, 12, 31): 
Year : 2012, Total Weeks : 52
Year : 2013, Total Weeks : 52
Year : 2014, Total Weeks : 52
Year : 2015, Total Weeks : 52
Year : 2016, Total Weeks : 53
Output with c.set(year, 1, 31): 
Year : 2012, Total Weeks : 53
Year : 2013, Total Weeks : 52
Year : 2014, Total Weeks : 52
Year : 2015, Total Weeks : 52
Year : 2016, Total Weeks : 52

I am unable to figure it out why the total weeks in a year are different when the calendar month is set to Dec. I have tried using months 1-12, for 1-11 the number of weeks are same but changes for the month 12. From the experiment I can predict it only happens with leap years. 我无法弄清楚为什么当日历月设置为12月时,一年中的总周数不同。我尝试使用1-12个月,1-11个星期数相同但是月份变化12从实验中我可以预测它只发生在闰年。

I had referred the following link: Calendar.getActualMaximum(Calendar.WEEK_OF_YEAR) weirdness 我引用了以下链接: Calendar.getActualMaximum(Calendar.WEEK_OF_YEAR)怪异

But this does not answer my query. 但这不符合我的疑问。

The first month is 第一个月是

private static final int JANUARY = 0;

and the last month is 而上个月是

private static final int DECEMBER = 11;

This means that month 12 is the first month of the next year. 这意味着第1212是第二个月的第一个月。

Here months index starts form 0 like this. 这里几个月的索引从这里开始形成0。

JANUARY=0, FEBRUARY=1,.., DECEMBER=11

So till 11 it will return correct values 所以直到11它才会返回正确的值

Example code: 示例代码:

public static int getNumWeeksForYear(int year) {  
        Calendar c = Calendar.getInstance();           
        c.set(year, 11,31); //issue
        c.setFirstDayOfWeek(Calendar.MONDAY );
        return c.getActualMaximum(Calendar.WEEK_OF_YEAR);   
    }

output: 输出:

Year : 2012, Total Weeks : 53
Year : 2013, Total Weeks : 52
Year : 2014, Total Weeks : 52
Year : 2015, Total Weeks : 52
Year : 2016, Total Weeks : 52

If you give grater than 11 如果你给的比11更大

c.set(year, 14,31);

output: 输出:

Year : 2012, Total Weeks : 52
Year : 2013, Total Weeks : 52
Year : 2014, Total Weeks : 52
Year : 2015, Total Weeks : 52
Year : 2016, Total Weeks : 53

to calculate accurate weeks in a year see this example 计算一年中的准确周数, 请参阅此示例

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM