JSTL formatDate在JSP中显示年份+1

时间:2014-08-18 12:08:56

标签: java date jstl formatdatetime

我有问题。我在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 或表示为 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天或更长时间。

但是,我的格式无法正常工作。有什么建议吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

YYYY是一周,而不是一年。 yyyy是一年。见http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html