2

我有个问题。我在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,这是错误的。

我发现: formatDateGregoriancalendar#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 周是 1,因为29.12.2014实际上是 2015 年的第一周。我为此使用德语语言环境,这意味着一年中的第一周是第一周有 4 天或更多天新年。

尽管如此,我的格式还是不能正常工作。有什么建议么?

非常感谢。

4

1 回答 1

3

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

于 2014-08-18T12:35:04.860 回答