gpt4 book ai didi

Java 世界的本地化方法 - 有什么隐含的含义吗?

转载 作者:行者123 更新时间:2023-11-30 02:24:49 29 4
gpt4 key购买 nike

在 .NET 中,许多情况下会隐式使用 CurrentCultureCurrentUICulture 属性。
例如,对 DateTime 值调用 ToString() 将根据当前用户的区域性设置设置日期和时间的格式。

相反,Java 的 LocalDate.toString() 具有固定格式,除非显式使用格式化程序。

因此,有一个问题:

除非开发人员明确指定,否则 Java 是否避免对语言环境的隐式依赖并具有一些固定格式?我应该担心这种隐含的情况吗?

最佳答案

toString不用于演示

toString大多数类上的方法实现是对象值的文本表示,用于调试和日志记录,而不是在用户界面中显示。 toString方法定义在Java中所有类的根父类(super class)中: Object::toString() .

toString java.time 中的实现使用标准 ISO 8601格式。这些可能适合也可能不适合您的用户,具体取决于受众。请注意,将日期时间值序列化为文本以存储/交换数据流时,ISO 8601 格式是理想的选择。

java.time format方法

为了呈现给用户,一般使用toString以外的方法。

java.time 框架有一个约定 format向其传递 DateTimeFormatter 的方法目的。通过调用静态因子 ofLocalized… 可以使该格式化程序自动本地化。方法。

ZonedDateTime示例

ZoneId z = ZoneId.of( "America/Montreal" ) ;
// Better to specify time zone explicitly than rely on the default implicitly.
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
FormatStyle s = FormatStyle.LONG ;
Locale l = Locale.CANADA_FRENCH ;
// Better to specify locale explicitly than rely on the default implicitly.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( s ).withLocale( l ) ;
String output = zdt.format( f ) ;

output: 28 août 2017 à 16:28:00 EDT

zdt.toString(): 2017-08-28T16:28:00.107907-04:00[America/Montreal]

请注意ZonedDateTime::toString通过在方括号中附加时区名称,明智地扩展了 ISO 8601 格式。

LocalDate示例

至于你的LocalDate问题,我们可以从 ZonedDateTime 中提取仅日期值.

LocalDate ld = zdt.toLocalDate() ;
DateTimeFormatter f2 = DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL ).withLocale( l );
String output2 = ld.format( f2 );

output2: lundi 28 août 2017

ld.toString(): 2017-08-28

隐式默认值

对于隐式默认值,是的,java.time 类使用 JVM 的当前默认值 Locale如果您不指定,则隐式显示。时区也是如此。

我建议养成始终明确指定两者的习惯,如上面的代码示例所示。两者都可以在运行时(!)由该 JVM 中运行的任何应用程序的任何线程中的任何代码进行更改。所以依赖默认值是不可靠的。

避免遗留日期时间类

仅供引用,被 java.time 取代的遗留日期时间类设计得很糟糕,包括一些奇怪的格式选择。不要将这些视为正确设计的指导。

关于Java 世界的本地化方法 - 有什么隐含的含义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45915181/

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