当前位置:  开发笔记 > 编程语言 > 正文

DateTimeFormatter不能一直工作,bug?

如何解决《DateTimeFormatter不能一直工作,bug?》经验,为你挑选了1个好方法。

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

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 2015-11-30 2015-10-31
31/12/16 30/11/15 31/10/15

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



1> Marvin..:

大写Y是" 基于周的年份 ",你正在寻找小写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

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有