周月2014年6月

问题描述:

对不起,问愚蠢的问题,但我不能让周的正确数目2014年6月的日历返回:周月2014年6月

public static void main(String[] args) { 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.DAY_OF_MONTH, 1); 
    calendar.set(Calendar.MONTH, Calendar.JUNE); 
    calendar.set(Calendar.YEAR, 2014); 
    calendar.setFirstDayOfWeek(Calendar.MONDAY); 
    System.out 
     .println("first day of week: " + calendar.getFirstDayOfWeek()); 
    System.out.println("weeks in month: " 
     + calendar.getActualMaximum(Calendar.WEEK_OF_MONTH)); 
    System.out.println("days in month: " 
     + calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); 
} 

我越来越:

first day of week: 2 
weeks in month: 5 
days in month: 30 

enter image description here

为什么2014年6月的周数不是6?我在Mac OS X 10.9.3上使用jdk1.8.0_05。

+0

我也尝试用Locale.UK创建日历。 – ruruskyi

一周的定义取决于每个Locale(国家,地区,无论什么)定义为一周中的第一天。你可以用Calendar#getFirstDayOfWeek()来检查。这也取决于它认为在第一周的最短日期应该是多少。你可以通过Calendar#getMinimalDaysInFirstWeek()获得。你的Locale似乎表明,它需要一天以上才能考虑这一周的这段时间。

例如,对于Locale.CANADA,自getMinimalDaysInFirstWeek()返回1以来,我获得了6周。

+0

这是一样的,如果我做Calendar.getInstance(Locale.FRANCE);或Calendar.getInstance(Locale.UK); – ruruskyi

+1

@ruruskyi是的,因为这两者都需要一周4天。 –

+0

谢谢! calendar.setMinimalDaysInFirstWeek(1);做的伎俩 – ruruskyi