DateTimeFormatter.RFC_1123_DATE_TIME
java.time类可以直接解析/生成字符串RFC 1123通过DateTimeFormatter.RFC_1123_DATE_TIME持续的。
ZonedDateTime zdt =
ZonedDateTime.parse(
"Thu, 25 Aug 2016 08:59:00 GMT" ,
DateTimeFormatter.RFC_1123_DATE_TIME
)
;
从那里,调整到您想要的时区。
ZoneId z = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", etc.
ZonedDateTime zdtMontreal = zdt.withZoneSameInstant( z );
仅供参考,那RFC 1123格式很糟糕,而且现在已经过时了。该格式的问题包括:不必要地假设英语、难以解析、使用非实时时区的 3-4 个字母的时区缩写、不标准化、甚至不唯一(!)。反而:
- 使用指定时区IANA 定义的正确时区.
- 使用标准序列化为文本ISO 8601格式。
java.time 类在解析/生成日期时间值的文本表示形式时默认使用这些格式。
搜索 Stack Overflow 以获取有关调整时区和生成日期时间值字符串的更多信息。
本地化内容
如果您的目标是生成文本以呈现给用户,而不是使用 RFC 1123 格式,请生成本地化文本。对于本地化内容,只需使用DateTimeFormatter.ofLocalizedDateTime( FormatStyle dateTimeStyle ).withLocale( Locale locale).
例如,对于美国用户,DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( Locale.US )
。或者,使用 JVM 当前的默认值Locale
, use DateTimeFormatter.ofLocalizedDateTime( … )
.
Locale locale = Locale.US ;
ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
DateTimeFormatter f =
DateTimeFormatter
.ofLocalizedDateTime( FormatStyle.FULL )
.withLocale( locale ) ;
String output = zdt.format( f ) ;
看到这个代码在 Ideone.com 上运行.
日本标准时间 2023 年 6 月 5 日星期一上午 10:30:43
About java.time
The java.time框架内置于 Java 8 及更高版本中。这些课程取代了麻烦的旧课程legacy日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat.
The 乔达时间项目,现在在维护模式,建议迁移到java.time类。
要了解更多信息,请参阅甲骨文教程。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310.
您可以交换java.time对象直接与您的数据库。用一个JDBC驱动程序符合JDBC 4.2或稍后。不需要字符串,不需要java.sql.*
类。
从哪里获取 java.time 类?
-
Java SE 8, Java SE 9, Java SE 10, Java SE 11以及后来的版本 - 具有捆绑实现的标准 Java API 的一部分。
- Java 9 添加了一些小功能和修复。
-
Java SE 6 and Java SE 7
- 大部分的java.time功能向后移植到 Java 6 和 7三十后端口.
- Android
- 更高版本的 Android 捆绑实现java.time类。
- 对于早期的 Android (三十ABP项目适应三十后端口(上文提到的)。看如何使用 ThreeTenABP....
The 三十额外项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval, YearWeek, YearQuarter, and more.