/**
* 最后修改于2010-1-13,之前有一个bug,测试2009-12-28与2010-01-02应该都属于2009年第52周,
* 2010年第一周开始日期是2010-01-03.(周日为一周的开始)
* @param endDate
* @return
*/
public static String weekOfYear(String endDate) {
String y = endDate.substring(0, 4);
String m = endDate.substring(5, 7);
String d = endDate.substring(8, endDate.length());
int year = Integer.parseInt(y);
int month = Integer.parseInt(m);
int date = Integer.parseInt(d);
String end = "";
Calendar c = new GregorianCalendar(year, month - 1, date);
c.setFirstDayOfWeek(Calendar.SUNDAY); // 设置每周的第一天为星期日
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 每周从周日开始
c.setMinimalDaysInFirstWeek(7);
String firstWeekDay = getYearWeekFirstDay(year, 1);
int weeks = 1;
weeks = c.get(Calendar.WEEK_OF_YEAR);
int ds = java.sql.Date.valueOf(endDate).compareTo(
java.sql.Date.valueOf(firstWeekDay));
end = c.get(Calendar.YEAR) + "-" + weeks;
if (ds < 0 && month == 1) {
end = year - 1 + "-" + weeks;
}
if (weeks < 10) {
end = c.get(Calendar.YEAR) + "-0" + weeks;
}
return end;
}
String firstWeekDay = getYearWeekFirstDay(year, 1);
int ds = java.sql.Date.valueOf(endDate).compareTo(
java.sql.Date.valueOf(firstWeekDay));
if (ds < 0 && month == 1) {
end = year - 1 + "-" + weeks;
}
这里加上了这样的判断,如果这几行去掉,比如:2010-01-02应该是09年第52周,这里会是:2010-52
关键的问题在于哪里仍然不清楚。这里算是总结出这里的关键所在,只能以这种“补丁”方式自己实现正确的算法,在网上也找到不少这个问题的解答,但现在仍然没有看到有谁讲清楚,求week_of_year时,setMinimalDaysInFirstWeek()怎么设置 ,或者怎么处理???
我知道直接用c.get(Calendar.WEEK_OF_YEAR);
包括设置了c.setFirstDayOfWeek(Calendar.SUNDAY); // 设置每周的第一天为星期日
用2010-01-02来测,仍然是有问题的。
其实,对于c.setMinimalDaysInFirstWeek(days); 这一年的第一周最少有多少天?最初试过1~7,发现都是有问题的。