我在Android应用中以RFC 1123格式获取日期时间Thu, 25 Aug 2016 08:59:00 GMT
。我需要转换为当地时间。
答案 0 :(得分:5)
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字母区域缩写,不是标准化的,甚至不是唯一的(!)。代替:
搜索Stack Overflow以获取有关调整时区和生成日期时间值字符串的更多信息。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。