尝试查找给定日期的周年。
使用下面的代码。 [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);
}
}
答案 0 :(得分:4)
第一周
日历使用两个来定义特定于语言环境的七天工作周 参数:一周的第一天和第一天的最小天数 一周(从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];