如何将日期从雅虎的天气API解析为Java Date



我正在使用Yahoo weather API来构建一些简单的应用程序。在 JSON 接收器中,有pubDate字段(根据文档)在 RFC 882 中(看起来像"pubDate":1546992000)。有谁知道如何在安卓中将这样的日期转换为日期?

它应该是这样的:new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new Date( [yourDateValue] * 1000L))你可以在这里测试结果:https://www.unixtimeconverter.io/[在此处插入您的发布日期]

试试这个:

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
String dateString = formatter.format(new Date(yourDateValue)));

您可以从此处检查和转换毫秒到日期。当我写下您的转换参考值时,它给了我 1970 年的日期。您必须在值的末尾添加"000"或乘以 1000 才能获得正确的日期。

tl;博士

Instant.ofEpochSecond( 
Long.parseLong( "1546992000" ) 
)

。表示 UTC 中 2019 年 1 月 1 日的第一个时刻。

2019-01-09T00:00:00Z

java.time

现代方法使用几年前取代了可怕的Date/Calendar/SimpleDateFormat类的java.time类。

假设1546992000表示自 UTC 中 1970 年第一个时刻的纪元参考以来的整秒数,解析为Instant

Instant instant = Instant.ofEpochSecond( 1_546_992_000L );

即时字符串(): 2019-01-09T00:00:00Z

要通过特定区域(时区)的人们使用的挂钟时间查看该时刻,请调整为ZonedDateTime实例。

ZoneId z = ZoneId.of( "Africa/Casablanca" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

ZonedDateTime.toString(): 2019-01-09T01:00+01:00[非洲/卡萨布兰卡]


关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧传统日期时间类,如java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参阅Oracle 教程。并搜索堆栈溢出以获取许多示例和解释。规范为 JSR 310。

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

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

从哪里获得java.time类?

Java SE 8、Java SE 9、Java SE
  • 10、Java SE 11及更高版本 - 标准 Java API 的一部分,具有捆绑实现。
    • Java 9添加了一些小功能和修复。
  • Java SE 6 和 Java
  • SE7
    • 大多数java.time功能在ThreeTen-Backport中向后移植到 Java 6 和 7。
  • Android
    • 更高版本的java.time类的 Android 捆绑实现。
    • 对于早期的Android(<26),ThreeTenABP项目适应了ThreeTen-Backport(如上所述)。请参阅如何使用ThreeTenABP...

最新更新