3

Trying to find Week-of-year for a given date.
Using the below piece of code. [ Java 1.7 ]

Problem:
29-Dec-2012 = week 52
30-Dec-2012 = week 1
30-Dec-2013 = week 52
31-Dec-2013 = week 1

When day-of-year = 365 or 366 , it gives week-of-year to 1.
Looks like some modulo 52 happens.
How to fix this ?

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

   }

}

4

3 回答 3

4

从文档中查看这里

第一周

Calendar 使用两个参数定义特定于语言环境的一周 7 天:一周的第一天和第一周的最少天数(从 1 到 7)。这些数字是在构造日历时从语言环境资源数据中获取的。它们也可以通过设置它们的值的方法明确指定。

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

于 2013-04-29T12:41:53.847 回答
3

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

于 2013-04-29T12:43:07.293 回答
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];
于 2018-01-24T16:30:54.833 回答