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

Ham*_*mza 1 java time android gtm-database

我在我的Android应用程序中获取Thu, 25 Aug 2016 08:59:00 GMTRFC 1123格式的日期时间.我需要转换为当地时间.

Bas*_*que 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 
    ) 
;
Run Code Online (Sandbox Code Playgroud)

从那里,调整到您想要的时区.

ZoneId z = ZoneId.of( "America/Montreal" );  // Or "Asia/Kolkata", etc.
ZonedDateTime zdtMontreal = zdt.withZoneSameInstant( z );
Run Code Online (Sandbox Code Playgroud)

仅供参考,RFC 1123格式很糟糕,现在已经过时了.格式的问题包括:假设英语,难以解析,并使用不是实时区域的3-4字母区域缩写,不是标准化的,甚至不是唯一的(!).代替:

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


关于java.time

java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.

现在处于维护模式Joda-Time项目建议迁移到java.time类.

要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.

您可以直接与数据库交换java.time对象.使用符合JDBC 4.2或更高版本的JDBC驱动程序.不需要字符串,不需要课程.java.sql.*

从哪里获取java.time类?

ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.