DateTimeFormatter不能一直工作,bug?

时间:2016-01-05 13:06:20

标签: java datetime java-8 java-time

我在运行一些代码时遇到了一个奇怪的错误。这是一个展示相同的简单版本。

$(".date:contains('Mon'), .date:contains('Tue'), .date:contains('Wed'), .date:contains('Thu'), .date:contains('Fri'), .date:contains('Sat'), .date:contains('Sun')").html(function(i, text) {
    return text.replace(/Mon/g, 'H')
        .replace(/Tue/g, 'K')
        .replace(/Wed/g, 'Sz')
        .replace(/Thu/g, 'Cs')
        .replace(/Fri/g, 'P')
        .replace(/Sat/g, 'Szo')
        .replace(/Sun/g, 'V');
});

这返回了以下结果

public class DateTest {

    public static void main(String[] args) {

        LocalDate decLast = LocalDate.of(2015, 12, 31);
        LocalDate novLast = LocalDate.of(2015, 11, 30);
        LocalDate octLast = LocalDate.of(2015, 10, 31);

        System.out.println(decLast+" "+novLast+" "+octLast);

        System.out.println(decLast.format(DateTimeFormatter.ofPattern("dd M YY"))+" "
                +novLast.format(DateTimeFormatter.ofPattern("dd M YY"))+" "
                +octLast.format(DateTimeFormatter.ofPattern("dd M YY")));


    }
}

不知何故,2015年12月31日已转换为2016年12月31日。 我写了一个for循环来做同样的不同年份,发现多年来有变化。 12月26日以下的任何日期都不存在该错误。这是一个错误还是我错过了什么?

1 个答案:

答案 0 :(得分:9)

大写Y是" week based year",您正在寻找小写y

来自链接的维基百科文章(我强调):

  

ISO周编号年(也称非正式ISO年)有52或53周。那是364或371天而不是通常的365或366天。额外的一周在这里称为闰周,尽管ISO 8601不使用该术语。周从星期一开始。一年的第一周是包含一年中第一个星期四的一周(因此,总是包含1月4日)。 ISO周年编号因此在接近1月1日的某些日子稍微偏离了格里高利

     

[...]

     

例如,2014年12月29日是ISO 2015-W1-1,即2015年而不是2014年。

比照。还有:https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html