我正在经历我们可以在 java 中获取Date 和 Time 的不同方式,而阅读文档时无法理解下面引用的意思。
不幸的是,这些功能的 API 不适合国际化。
以上引用来自java的Date类文档。 这意味着什么 ?? 这是 Date 类的方法被弃用的原因吗?
如果您查看建议的替换项,您会看到有两个 - Calendar 和 GregorianCalendar。
程序员需要根据代码的意图做出选择。旧的 API 将是其中之一。即“不支持国际化”。
仅使用 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.
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