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と表示されますが、これは間違っています。

私が見つけたもの: 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;
}

したがって、2014年 12 月 29 日は実際には 2015 年の最初の週であるため、年の週は 1 です。これにはドイツ語のロケールを使用します。つまり、年の最初の週は、新年。

それでも、私のフォーマットは正しく動作しません。助言がありますか?

どうもありがとう。

4

1 に答える 1

3

YYYY年ではなく週年です。yyyy年です。http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.htmlを参照してください。

于 2014-08-18T12:35:04.860 に答える