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
发布评论