我有一个问题。我在jsp中使用如下代码:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:formatDate type="date" pattern="dd.MM.YYYY" value="${booking.startDate}"/>
的日期为:2014-12-29或表示为long 1419807600000,显示为29.12.2015,这是错误的
我发现:formatDate在以下代码段之后使用内部Gregoriancalendar#getWeekYear()
:
if (field == CalendarBuilder.WEEK_YEAR) {
if (calendar.isWeekDateSupported()) {
value = calendar.getWeekYear();
}...
转到GregorianCalendar#getWeekYear()
中的这段代码:
if (year > gregorianCutoverYear + 1) {
int weekOfYear = internalGet(WEEK_OF_YEAR);
if (internalGet(MONTH) == JANUARY) {
if (weekOfYear >= 52) {
--year;
}
} else {
if (weekOfYear == 1) {
++year;
}
}
return year;
}
显然,问题在这里:
if (weekOfYear == 1) {
++year;
}
所以,一年中的第一周是1,因为29.12.2014实际上是在2015年的第一周。我使用德国语言环境,这意味着一年的第一周是新的一年中有4天或更多天的第一周。
仍然,我的格式不能正常工作。有什么建议吗?
YYYY
是星期年份,而不是年份。yyyy
是年份。见http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html