我有一个ZonedDateTime对象,我想根据给定的Locale对其进行格式化。也就是说,在美国,我希望格式是";M-dd-y";,但在英国;dd-M-y";。
给定指定的区域设置,执行此操作的最佳方法是什么?
java.time类可以自动本地化文本的生成。
Locale locale = Locale.CANADA_FRENCH ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( locale ) ;
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Edmonton" ) ) ;
String output = zdt.format( f ) ;
请在IdeOne.com上实时查看此代码。
2021年7月10日至18时16分51秒罗氏
如果只希望日期显示为英式,请提取一个LocalDate
,并使用Locale.UK
进行本地化。
myZdt
.toLocalDate()
.format(
DateTimeFormatter
.ofLocalizedDate(
FormatStyle.SHORT
)
.withLocale(
Locale.UK
)
)
2021年6月11日
但Java 16和维基百科页面英国的日期和时间符号都不同意您的说法:
在英国应该是";dd-M-y";
相反,维基百科声称英国风格是DD/MM/YY,而Java16输出的是四位数的年份。根据我的经验,两位数的年份只会引起混乱;我强烈建议始终使用4位数年份。
如果要强制使用图案,请使用DateTimeFormatter.ofPattern
。