gpt4 book ai didi

java - 如何在 Java 中按照区域设置正确的顺序格式化日期和月份?

转载 作者:行者123 更新时间:2023-12-03 05:08:06 25 4
gpt4 key购买 nike

有没有办法在 Java/Kotlin 中按照区域设置正确的顺序格式化日期和月份(以紧凑形式),而不是年份?因此,对于英语,它应该是“Sep 20”,但对于瑞典语,它应该是“20 sep.”。

为了比较,在 Cocoa 平台上,我可以执行以下操作(在 Swift 中):

let formatter = DateFormatter()
formatter.locale = Locale(identifier: "sv_SE")
formatter.setLocalizedDateFormatFromTemplate("MMM d")
print(formatter.string(from: Date()))

这将正确地扭转局面。 Java SDK 是否有类似的功能?我一直在使用 DateTimeFormatter 和较旧的 SimpleTimeFormat API 尝试各种形式,但没有成功。

注释:this question 不同,我不想要包含年份的完整媒体格式。我也不想要 DateTimeFormatter.ofPattern("MMM d"),因为这会在瑞典语中给出错误的结果,或者 DateTimeFormatter.ofPattern("d MMM") ,因为这会给出错误的英语结果。

最佳答案

不,抱歉。据我所知,没有哪个 Java 库会自动将 "MMM d" 转换为 20 sep.,以适应更喜欢月份缩写之前的月份日期的语言环境。

您可以尝试修改answer by Rowi这样:

DateTimeFormatter ft = 
DateTimeFormatter
.ofLocalizedDate(FormatStyle.MEDIUM)
.withLocale(Locale.forLanguageTag("sv-SE"))
;

但是结果是:

20 sep. 2019

其中包括您没有询问的年份。

高级解决方案将使用 DateTimeFormatterBuilder构建类DateTimeFormatter对象。

DateTimeFormatterBuilder
.getLocalizedDateTimePattern(
FormatStyle.MEDIUM,
null,
IsoChronology.INSTANCE,
Locale.forLanguageTag("sv-SE")
)

这将返回d MMM y。修改此字符串以删除 y 及其前面的空格。请注意,在其他语言中,y 可能是 yyyyyyu,并且可能不会出现在字符串的最后。将修改后的格式模式字符串传递给 DateTimeFormatter.ofPattern

可能会不稳定。即使您查看所有可用语言环境的格式模式字符串,CLDR 的下一版本(字符串的来源)可能仍然包含惊喜。但我认为这是我们能做的最好的事情。如果是我,我会考虑抛出异常,以防我检测到 getLocalizedDateTimePattern 中的字符串看起来不像我知道如何修改的字符串。

关于java - 如何在 Java 中按照区域设置正确的顺序格式化日期和月份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56802168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com