java.util.Calendar中的WEEK_OF_YEAR在第365和366天返回1

3
尝试查找给定日期的年周。使用以下代码片段。[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个回答

4

点击此处 查看文档

第一周

日历使用两个参数定义了一个特定于语言环境的七天星期:一周的第一天和第一周最少包含的天数(从1到7)。当创建日历时,这些数字将从语言环境资源数据中获得。它们也可以通过设置其值的方法明确指定。

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


@Ranga Nathan,你现在明白了吗? - PSR

3

这是因为第53周不一定存在,可以查看维基百科文章了解更多关于ISO周的信息,特别是在您的情况下: “第1周是从12月29日至1月4日之间的星期一开始的一周”。


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];

add some description too - Anandhu Nadesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接