为什么 Date 类不支持国际化?

问题描述 投票:0回答:2

我正在经历我们可以在 java 中获取Date 和 Time 的不同方式,而阅读文档时无法理解下面引用的意思。

不幸的是,这些功能的 API 不适合国际化。

以上引用来自java的Date类文档。 这意味着什么 ?? 这是 Date 类的方法被弃用的原因吗?

java date datetime time deprecated
2个回答
0
投票

如果您查看建议的替换项,您会看到有两个 - Calendar 和 GregorianCalendar。

程序员需要根据代码的意图做出选择。旧的 API 将是其中之一。即“不支持国际化”。


0
投票

tl;博士

仅使用 java.time 类。切勿使用

Date
/
Calendar

ZonedDateTime.now(
                ZoneId.of( "Asia/Tokyo" )
        )
        .format(
                DateTimeFormatter
                        .ofLocalizedDateTime( FormatStyle.FULL )
                        .withLocale( Locale.GERMANY )
        )

Sonntag, 7. Mai 2023, 04:53:02 Japanische Normalzeit

避免遗留日期时间类

你问:

这就是 Date 类的方法被弃用的原因吗?

遗留的日期时间类充斥着糟糕的设计决策,这些决策是由不了解日期时间处理的人编写的。缺乏国际化只是许多问题之一。

试图理解这些遗留类是浪费时间,除非你想要学习如何 进行正确的面向对象编程。这些类在多年前被 JSR 310. 中定义的现代 java.time

类所取代

既不使用两个

Date
类,也不使用
Calendar
SimpleDateFormat
GregorianCalendar
等。仅使用java.time包中的日期时间类。将您宝贵的学习时间集中在java.time.

java.time

java.time 类通过

DateTimeFormatter
类提供国际化。

这里是一些示例代码。

捕捉日本人民使用的挂钟时间/日历中看到的当前时刻。为此,使用

ZonedDateTime
类。使用
ZoneId
类指定感兴趣的时区。

ZoneId zoneIdTokyo = ZoneId.of( "Asia/Tokyo" );
ZonedDateTime zdtTokyo = ZonedDateTime.now( zoneIdTokyo );

使用法语加拿大本地化(人类语言和文化规范)生成代表那一刻的文本。

Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter formatter =
        DateTimeFormatter
                .ofLocalizedDateTime( FormatStyle.FULL )
                .withLocale( locale );
String output = zdtTokyo.format( formatter );

转储到控制台。

System.out.println( "zdtTokyo.toString() = " + zdtTokyo );
System.out.println( "output = " + output );

运行时:

zdtTokyo.toString() = 2023-05-07T04:47:54.551174+09:00[Asia/Tokyo]
output = dimanche 7 mai 2023, 04 h 47 min 54 s heure normale du Japon
© www.soinside.com 2019 - 2024. All rights reserved.