当我将 LocalDate 格式化为 dd.MMM.YYYY 我得到 01.Jan..2000 有两个点

互联网 行业动态 更新时间:2024-06-13 00:19:32

Ste*_*n C 7

问题的原因是月份的缩写是特定于语言环境的:

在某些语言环境中,有一个点(句点)来表示缩写1;Locale.CANADA例如。在其他情况下没有;Locale.ENGLISH例如。 在点表示缩写的语言环境中,当月份的名称不需要缩写时,您可能会发现也可能不会发现点。例如,五月的名称只有三个字母,因此May.表明这是一个缩写是不合逻辑的。

有多种方法可以解决这个问题,包括:

不要修复它。在某些情况下,带有双点的输出在逻辑上是正确的(通过某种逻辑)2,尽管它看起来很奇怪。

我的首选方法是使用不同的输出格式。 不要使用点作为分隔符。

使用点字符作为分隔符......非常规......当你将它与缩写的月份名称结合起来时,你会得到这个尴尬的边缘情况。

当然有办法解决这个问题,但考虑到如果其他人需要在他们的代码库中解析你的日期,他们可能会遇到同样的问题。

将您的硬线连接到缩写名称中没有点DateTimeFormatter的现有位置。Locale

理论上存在他们可能决定更改标准中的缩写的风险Locale。但怀疑他们会这样做,因为这样的更改可能会破坏隐式依赖于语言环境的客户代码......就像你的那样。

创建一个自定义Locale并在创建DateTimeFormatter.

用于DateTimeFormatterBuilder创建格式化程序。要处理月份,请使用appendText(TemporalField field, Map<Long,String> textLookup)包含您要使用的缩写的查找表。

根据您“附加”其他字段的方式,您的格式化程序可以完全或部分独立于语言环境。


在我看来,其中 2. 和 5. 是最“正确”的。Ole 的回答用代码说明了这些选项。


1 - 请参阅这篇关于美式英语语法的文章 -当您需要缩写后的句点时。
2 - 问题在于说服人们“看起来很奇怪但合乎逻辑”比“看起来不错但不合逻辑”更好。我不认为你会赢得这场争论......

更多推荐

我将,格式,有两个,LocalDate,MMM

本文发布于:2023-04-21 09:59:13,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:我将   格式   有两个   LocalDate   MMM

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!