我收到了一些令人费解的结果SimpleDateFormat,并希望有人可以在这个问题上提出一些看法。输出:SimpleDateFormat周计算
Time = Mon Dec 27 00:00:00 PST 2010
2010-01 <--- THIS IS WHAT I DON'T UNDERSTAND
Start of week = Sun Dec 26 00:00:00 PST 2010
2010-01
End of Week = Sat Jan 01 23:59:59 PST 2011
2011-01
我应该处理延伸到明年作为一个特殊的情况下,一年的最后一个“周”?或者这是解释这个问题的正确方法?很显然,当试图按顺序组织周时,订单是不正确的。调整初始值,2005年12月25日被认为是第53周。我还没有看过乔达,看看乔达是否也有类似的结果。
相关的代码:
private static Date getStartOfWeek(Date d) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.setTime(d);
calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());
return calendar.getTime();
}
private static Date getEndOfWeek(Date d) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.setTime(d);
calendar.add(Calendar.WEEK_OF_YEAR, 1);
calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());
calendar.add(Calendar.MILLISECOND, -1);
return calendar.getTime();
}
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(2010, Calendar.DECEMBER, 27);
Date d = calendar.getTime();
Date start = getStartOfWeek(d);
Date end = getEndOfWeek(d);
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-ww");
System.out.println("Time = " + d);
System.out.println(fmt.format(d));
System.out.println("Start of week = " + start);
System.out.println(fmt.format(start));
System.out.println("End of Week = " + end);
System.out.println(fmt.format(end));
背景:我发现这个使用JasperReports的交叉表(日期分为周)时。
编辑:我使用的是JDK 1.6.0_25
编辑:看来,我将不得不使用乔达来得到正确的结果。为了获得一周的开始/结束,我结束了使用:LocalDate.withDayOfWeek
。为了检索年份和周数,我使用了DateTime.getWeekyear
和DateTime.getWeekOfWeekyear
。
+1在日期表示中引发一个微妙的问题。请参阅下面的答案。 –