ska*_*dal 6 java localization date-formatting
有没有办法在 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()))
Run Code Online (Sandbox Code Playgroud)
这将正确地扭转局面。Java SDK 是否有相同的功能?我一直在尝试各种形式DateTimeFormatter的SimpleTimeFormatAPI和旧API,但没有成功。
注意:与此问题不同,我不想要包含年份的完整媒体格式。我也不想要DateTimeFormatter.ofPattern("MMM d"),因为这在瑞典语中给出了不正确的结果,或者DateTimeFormatter.ofPattern("d MMM"),因为在英语中给出了不正确的结果。
不,对不起。我知道没有 Java 库会自动"MMM d"转换20 sep.为更喜欢月份缩写之前的月份的语言环境。
DateTimeFormatter ft =
DateTimeFormatter
.ofLocalizedDate(FormatStyle.MEDIUM)
.withLocale(Locale.forLanguageTag("sv-SE"))
;
Run Code Online (Sandbox Code Playgroud)
然而结果是:
9 月 20 日 2019年
它包括您没有要求的年份。
高级解决方案将使用DateTimeFormatterBuilder该类来构建DateTimeFormatter对象。
DateTimeFormatterBuilder
.getLocalizedDateTimePattern(
FormatStyle.MEDIUM,
null,
IsoChronology.INSTANCE,
Locale.forLanguageTag("sv-SE")
)
Run Code Online (Sandbox Code Playgroud)
这返回d MMM y. 修改此字符串以删除y和它前面的空格。请注意,在其他语言中,y可能是yy,yyyy或者u并且可能不会出现在字符串的最后。将修改后的格式模式字符串传递给DateTimeFormatter.ofPattern.
它可能是不稳定的。即使您查看所有可用语言环境的格式模式字符串,CLDR的下一个版本(字符串的来源)可能仍然包含惊喜。但我认为这是我们能做的最好的事情。如果是我,我会考虑抛出异常,以防我检测到来自的字符串getLocalizedDateTimePattern看起来不像我知道如何修改的字符串。
| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |