当前位置: 首页 > 知识库问答 >
问题:

Java中的`datetimeformatter'格式模式代码中的`uuuu`与`yyyy`?

吕灿
2023-03-14

DateTimeFormatter类文档说明了该年的格式代码

u年2004年;04

2004年的y年;04

Year:字母的计数确定最小字段宽度,在该宽度下使用填充。如果字母数为2,则使用缩减的两位数形式。对于打印,这输出最右边的两个数字。对于解析,这将使用2000的基值进行解析,导致一年在2000到2099(含2099)的范围内。如果字母计数少于四个(但不是两个),则符号仅输出负年份,如Signstyle.normal所示。否则,如果超过填充宽度,则输出符号,如signstyle.exceeds_pad所示。

似乎那些熟悉的人编写的示例代码使用uuuu,但为什么呢?

其他格式化类,如遗留的simpledateformat只有yyyy,所以我很困惑为什么java.time会为“纪元年份”带来这个uuuu

共有1个答案

夔光霁
2023-03-14

java.time-package的范围内,我们可以说:

>

  • 使用“u”而不是“y”更安全,因为DateTimeFormatter将坚持纪元与“y”(=纪元年份)结合使用。因此使用“u”可以避免严格格式化/解析中可能出现的意外异常。另见此so-post。与“Y”相比,“U”符号改进的另一个小事情是打印/解析负的公历年(在很久以前)。

    否则,我们可以清楚地指出,使用“u”而不是“y”打破了Java编程中长期存在的习惯。“u”是否代表任何年份也不是很直观,因为a)英文单词“year”的第一个字母与这个符号不一致,b)simpledateformat从Java-7(ISO-day-number-of-week)起就将“u”用于不同的目的?

    我们还应该看到,如果考虑到历史日期,在ISO上下文中使用电子逆向拍卖(符号“G”)通常是危险的。如果“g”与“u”一起使用,那么这两个字段彼此无关。如果“g”与“y”一起使用,那么格式化程序就满足了,但当历史日期要求使用不同的html" target="_blank">日历和日期处理时,仍然使用预指示的公历。

    在开发和集成JSR310(java.time-包)时,设计人员决定使用Common Locale Data Repository(CLDR)/LDML-Spec作为DateTimeFormatter中模式符号的基础。在CLDR中,符号“U”已经定义为公历前年,因此这个含义被新的JSR-310所采用(但由于向下兼容的原因,simpledateformat没有使用)。

    然而,遵循CLDR的决定并不是很一致,因为JSR-310还引入了新的模式符号,这些符号在CLDR中没有,现在也没有,请参阅这张旧的CLDR-Ticket。建议的符号“I”被CLDR改为“VV”,最后被JSR-310超越,包括新的符号“X”和“X”。但是“n”和“n”在CLDR中仍然不存在,而且由于这张旧票已经关闭,所以完全不清楚CLDR是否会在JSR-310的意义上支持它。而且,票证没有提到符号“P”(JSR-310中的填充指令,但在CLDR中没有定义)。因此,我们在不同库和语言之间的模式定义之间仍然没有完全一致。

    关于“Y”:我们也不应该忽视这样一个事实,即CLDR将这个纪元与至少某种混合的朱利安/格里高利年联系在一起,而不是与JSR-310那样的预言性的格里高利年联系在一起(撇开负年的奇怪性不谈)。所以在这里,CLDR和JSR-310之间也没有完美的一致。

  •  类似资料:
    • 问题内容: 我正在使用FreeMarker生成Java代码,但是由于大多数都是动态生成的,因此很难控制代码的形成。 我想使代码格式正确。有谁知道lib或类似Java代码的漂亮打印机? 问题答案: 我想我会像这个人一样使用Eclipse的CodeFormatter:http ://ssscripting.wordpress.com/2009/06/10/how-to-use-the-eclipse-

    • 本文向大家介绍Ruby使用设计模式中的代理模式与装饰模式的代码实例,包括了Ruby使用设计模式中的代理模式与装饰模式的代码实例的使用技巧和注意事项,需要的朋友参考一下 代理模式 需求: 小明让小李替他追小丽(送洋娃娃,送花,送巧克力) 没有代理的代码: 只有代理的代码: 只是把追求者类换成了代理类。 实际的代理模式代码: 装饰模式   需求: 给人搭配不同的服饰 代码版本一 这样写的话,功能是实现

    • 我有一些旧代码,我试图在VisualStudio代码中编辑。它混合了HTML和C#EG: 它有点像Razor,但不一样。我已经尝试了许多格式C#、Razor、超文本标记语言等。所有这些都以这样或那样的方式破坏代码。 如果我在Visual Studio(2019)中格式化它,那就太好了。有没有办法在Visual Studio Code中使用Visual Studio的格式化程序? 我知道简单的答案是

    • 有没有办法在Intellij中创建自定义的代码格式顺序?更具体地说,当一起按Option+Command+L时,我试图更改默认格式,并按类型格式化导入。

    • 我有一个关于格式化程序的问题。 在SWAPI(https://SWAPI.co/documentation#people)中,您可以读取和日期,其格式如下: 但是在预定义格式化程序中的类DateTimeFormatter的文档一节中,我看不到任何与SWAPI日期示例匹配的格式化程序。

    • 本文向大家介绍Java中的代理模式详解及实例代码,包括了Java中的代理模式详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 java 代理模式详解 前言: 在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以在客户端和目标对象之间起到 中介的作用,并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务。