JSTL formatDate在JSP中显示年+ 1



我有一个问题。我在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

相关内容

  • 没有找到相关文章

最新更新