如何将此JSON天气时间数据(纪元时间)转换为当地时间

时间:2016-10-15 20:51:00

标签: android json parsing

我是Android编程的初学者,并创建了一个应用程序,显示当天早上(早上6点),下午(中午12点)和晚上(晚上9点)的天气信息。 我正在使用本网站的JSON数据。 http://api.openweathermap.org/data/2.5/forecast?q=kangra,india&appid=41352ca35dd1be72cc7d9f47351d1b41&units=metric 链接中给出的时间戳是UTC格式,我无法根据当地时间显示天气信息。(我需要在当地时间早上6点到12点和下午6点播放天气信息) 我很感激很多人都可以帮我解决问题。

2 个答案:

答案 0 :(得分:0)

上面的日期格式为epoch format (or Unix time)

要转换为java Date,您可以这样做(从this SO answer开始)

Date expiry = new Date(Long.parseLong(date));

date从api返回的intlong值,例如1476576000

答案 1 :(得分:0)

您需要阅读数据Feed的文档,以确定数据的含义。

我将猜测 dt字段是自UTC中1970-01-01T00:00:00纪元以来的整数秒。

示例数据:

  

“DT”:1476576000

Instant类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。

Instant instant = Instant.ofEpochSecond ( 1476576000L );
  

instant.toString():2016-10-16T00:00:00Z

您可以将其调整到任何时区。以continent/region的格式指定proper time zone name。切勿使用诸如ESTIST之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。应用ZoneId获取ZonedDateTime

ZoneId zoneKolkata = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdtKolkata = instant.atZone( zoneKolkata );
  

zdtKolkata.toString():2016-10-16T05:30 + 05:30 [亚洲/加尔各答]

您可以再次为其他时区执行此操作。

ZoneId zoneMontreal = ZoneId.of( "America/Montreal" );
ZonedDateTime zdtMontreal = instant.atZone( zoneMontreal );
  

zdtMontreal.toString():2016-10-15T20:00-04:00 [美国/蒙特利尔]

所有这三个日期时间对象(instantzdtKolkatazdtMontreal)都是所有相同的时刻,同一个点上的时间线。唯一的区别是查看不同地区的wall-clock time

关于java.time

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

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore