如何将json日期转换为java.util.Date
{"date":31,"day":4,"hours":0,"minutes":0,"month":11,"seconds":0,"time":2145805200000,"timezoneOffset":-420,"year":137}
感谢您的帮助
答案 0 :(得分:0)
通过Google快速搜索,我找到了这个网页:CLICK
返回Date
的'parse'方法向您展示了如何在Java中使用SimpleDateFormat
类,该类用于将字符串解析为Date
。
希望这有帮助!
答案 1 :(得分:0)
没有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数据有更多了解,那么可能会找到解决方案。