在java中将json日期转换为日期

时间:2015-12-04 09:51:21

标签: java json date

如何将json日期转换为java.util.Date

{"date":31,"day":4,"hours":0,"minutes":0,"month":11,"seconds":0,"time":2145805200000,"timezoneOffset":-420,"year":137}

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

通过Google快速搜索,我找到了这个网页:CLICK
返回Date的'parse'方法向您展示了如何在Java中使用SimpleDateFormat类,该类用于将字符串解析为Date

希望这有帮助!

答案 1 :(得分:0)

没有JSON日期

没有JSON日期。 JSON有very few data types,其中没有一个与日期时间相关。

自纪元以来的数量

值为time的{​​{1}}项可能是自epoch以来的计数。这两个问题是:什么时代?什么粒度计数?

milliseconds中1970年第一时刻的Unix epoch以来,常用的是UTC

Java 8及更高版本中内置的java.time框架可以转换这样的数字。 2145805200000类表示UTC时间轴上的时刻。

Instant

转储到控制台。

long sinceEpoch = 2145805200000L;
Instant instant = Instant.ofEpochMilli ( sinceEpoch );
  

瞬间:2037-12-30T17:00:00Z

该值可能接近JSON中的其他字段,但不是很匹配。

您的JSON的字段System.out.println ( "instant: " + instant ); 的值为timezoneOffset。如果我们在几分钟内将该数字解释为offset-from-UTC,那将意味着7个小时。我们可以要求java.time将Instant调整为这样的偏移量。

通常我们会想要使用时区进行此调整。时区是与UTC 的偏移量加上一组用于处理夏令时(DST)等异常的历史规则。但在这种情况下,我们只有UTC的偏移量。因此,我们使用子类-420而不是ZoneId。结果是ZoneOffset

ZonedDateTime

转储到控制台。

ZoneOffset zoneOffset = ZoneOffset.ofHours ( 7 );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneOffset );
  

时刻:2037-12-30T17:00:00Z + zoneOffset:+07:00 = zdt:2037-12-31T00:00 + 07:00

这让我们在2037年的12月31日开始了。仍然不能与其他JSON领域完全匹配。

但是,如果 System.out.println ( "instant: " + instant + " + zoneOffset: " + zoneOffset + " = zdt: " + zdt ); 意味着 UTC之后7小时而不是提前,我们需要将该偏移从-420小时更改为负{{1} } 小时。然后结果将是:

  

时刻:2037-12-30T17:00:00Z + zoneOffset:-07:00 = zdt:2037-12-30T10:00-07:00

如果您对JSON数据有更多了解,那么可能会找到解决方案。