首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java DateTimeFormatter问题

Java DateTimeFormatter问题
EN

Stack Overflow用户
提问于 2021-11-14 11:07:54
回答 2查看 95关注 0票数 2

以下代码(主)

代码语言:javascript
复制
LocalDate d ;
DateTimeFormatter formatter;

d = LocalDate.of(2021, 11, 14);
System.out.println(d);

formatter = DateTimeFormatter.ofPattern("MM.dd.YYYY");
System.out.println(formatter.format(d));

formatter = DateTimeFormatter.ofPattern("YYYY/MM/dd");
System.out.println(formatter.format(d)+ "\n");
            
d = LocalDate.of(2021, 1, 1);
System.out.println(d);
                
formatter = DateTimeFormatter.ofPattern("MM.dd.YYYY");
System.out.println(formatter.format(d));

formatter = DateTimeFormatter.ofPattern("YYYY/MM/dd");
System.out.println(formatter.format(d));

在我的Netbeans 12.5中使用最新或最近的Oracle Java 17的输出

代码语言:javascript
复制
run:
2021-11-14
14.11.2021
2021/11/14

2021-01-01
01.01.2020
2020/01/01
BUILD SUCCESSFUL (total time: 0 seconds)

今天14-11月-2021的格式化输出是正常的,但是01-1-1-2021的输出是错误的.格式化输出打印2020,一年休假。

你能重复一遍吗?如果是这样的话:知道为什么会发生这种情况吗?

EN

回答 2

Stack Overflow用户

发布于 2021-11-14 11:26:29

根据java.time.format.DateTimeFormatter的Javadoc

  • y (小写)代表年代和
  • Y (大写)代表基于周的一年.

基于周的日期/时间系统是在ISO8601中定义的(参见:维基百科文章)。

票数 4
EN

Stack Overflow用户

发布于 2021-11-14 12:00:36

你想要的是u而不是Y

  • Y是以周为基础的一年.如果你是个会计,这很重要。如果你不是,这是魔鬼:它似乎几乎总是正确的,除了在某些高度异国情调的日期,如1月1日。周通常被定义为:“无论该星期的星期四是哪一年,那是该周所属的年份”,因此,如果1月1日是星期五,那么包含1月1日的那一周是前一年的一周(因为该周的星期四是12月31日)。
  • 正如你所知道的,y是一年,只不过当你去BC的时候,它并没有做你想做的事情。这不太可能出现,但也不可能是以周为基础的一年。没有人喜欢2k风格的虫子,对吧?
  • u真的做了你想象中的事情。它只给了你年。如果需要的话是否定的。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69962382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档