我收到了一些令人費解的結果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在日期表示中引發一個微妙的問題。請參閱下面的答案。 –