我正在研究在Java中获得Date and Time的不同方法,而阅读文档时无法理解下面这句话的意思.
不幸的是,这些函数的API不适合国际化.
以上引用来自Java的Date类的文档. 这是什么意思? 这就是Date类的方法被弃用的原因吗?
我正在研究在Java中获得Date and Time的不同方法,而阅读文档时无法理解下面这句话的意思.
不幸的是,这些函数的API不适合国际化.
以上引用来自Java的Date类的文档. 这是什么意思? 这就是Date类的方法被弃用的原因吗?
仅使用java.time个类.切勿使用Date
/Calendar
等.
ZonedDateTime.now(
ZoneId.of( "Asia/Tokyo" )
)
.format(
DateTimeFormatter
.ofLocalizedDateTime( FormatStyle.FULL )
.withLocale( Locale.GERMANY )
)
日本标准时间2023年5月7日星期日04:53:02
你问:
这就是Date类的方法被弃用的原因吗?
遗留的Date-Time类充斥着糟糕的设计决策,由不了解Date-Time处理的人编写.缺乏国际化只是many个问题之一.
试图理解这些遗留类是浪费时间,除非您想学习如何进行正确的面向对象编程.这些班级在几年前被现代的java.time个班级取代,这些班级被JSR 310个班级定义.
既不使用两个Date
类,也不使用Calendar
、SimpleDateFormat
、GregorianCalendar
等.?只使用java.time包中的Date-Time类.把你宝贵的学习时间集中在java.time点上.
这java.time个类通过?DateTimeFormatter
类提供internationalization个.
在现代Java中,本地化信息来自Unicode Consortium发布的Common Locale Data Repository Project (CLDR).
以下是一些示例代码.
捕捉当前的时刻,就像在wall-clock time/calendar used by the people of Japan中看到的那样.为此,请使用ZonedDateTime
类.使用ZoneId
类指定感兴趣的时区.
ZoneId zoneIdTokyo = ZoneId.of( "Asia/Tokyo" );
ZonedDateTime zdtTokyo = ZonedDateTime.now( zoneIdTokyo );
使用French Canadian个本地化(人类语言和文化规范)生成代表那个时刻的文本.
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