根据区域设置格式化ZonedDateTime



我有一个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

最新更新