如何将RFC-1123日期时格式化程序转换为本地时间

时间:2016-09-01 19:28:42

标签: java android time gtm-database

我在Android应用中以RFC 1123格式获取日期时间Thu, 25 Aug 2016 08:59:00 GMT。我需要转换为当地时间。

1 个答案:

答案 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字母区域缩写,不是标准化的,甚至不是唯一的(!)。代替:

  • 使用proper IANA-defined time zones指定时区。
  • 使用标准ISO 8601格式序列化为文本。
    在解析/生成日期时间值的文本表示时,java.time类默认使用这些格式。

搜索Stack Overflow以获取有关调整时区和生成日期时间值字符串的更多信息。

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance 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的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore