java.util.Calendar WEEK_OF_YEAR为365和1提供1第366天

时间:2013-04-29 12:38:41

标签: java

尝试查找给定日期的周年。
使用下面的代码。 [Java 1.7]

问题:
2012年12月29日=第52周 2012年12月30日=第1周 2013年12月30日=第52周 2013年12月31日=第1周

当年份= 365或366时,它将一年中的一周提供给1.
看起来有些模52发生了 如何解决这个问题?

import java.util.Calendar;
import java.util.GregorianCalendar;

public class cal2{
   public static void main (String[] args) {

   Calendar mycal = GregorianCalendar.getInstance();  

   mycal.setLenient(false);

   int year  = 2012;
   int month = 11;  //0=Jan, 11=Dec
   int date  = 29; 

   mycal.set(year , 0 , 1);
   mycal.setFirstDayOfWeek(mycal.get(mycal.DAY_OF_WEEK));

   mycal.set(year,month,date);
   System.out.println("\n>>>>>>>>WEEK :"+mycal.get(mycal.WEEK_OF_YEAR));

   // System.out.println("\nDATE :"+mycal);

   }

}

3 个答案:

答案 0 :(得分:4)

来自文档的

SEE HERE

第一周

  

日历使用两个来定义特定于语言环境的七天工作周   参数:一周的第一天和第一天的最小天数   一周(从1到7)。这些数字取自语言环境资源   构建日历时的数据。它们也可能被指定   明确地通过设置其值的方法。

     

设置或获取WEEK_OF_MONTH或WEEK_OF_YEAR字段时,   日历必须将月份或年份的第一周确定为   参照点。一个月或一年的第一周被定义为   最早的七天时间从getFirstDayOfWeek()开始   至少包含该月的getMinimalDaysInFirstWeek()天或   年。周数在第一周之前编号为......,-1,0;周数   2,3,......跟着它。请注意,返回的规范化编号   get()可能不同。例如,特定的Calendar子类可以   将前一周的第1周指定为前一周的第n周   年。

答案 1 :(得分:3)

这是因为第53周不一定存在,请查看this wikipedia article以了解有关ISO周的更多信息,特别是在您的情况下: “第1周是从12月29日至1月4日的周一开始的一周”

答案 2 :(得分:0)

String[] dates = new String[] { "SUNDAY", "MONDAY", "TUESDAY", //
        "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" };
Calendar cal = Calendar.getInstance();
cal.set(Integer.parseInt(year), 
        Integer.parseInt(month) - 1, 
        Integer.parseInt(day));
int date_of_week = cal.get(Calendar.DAY_OF_WEEK);
return dates[date_of_week - 1];