1

我目前正在尝试将一些包含时间戳的数据库对象存储到图形数据库(dgraph)中。我想使用 JSON 轻松获取日期和时间信息并将其存储在图表中的日期时间节点中,但图表将仅接受以RFC 3339格式格式化的数据,并带有可选的时区(例如2006-01-02T15:04:05.999999999)。

我一直在使用 Gson 进行序列化和反序列化,其他数据类型工作正常,但尝试查询返回的日期null。我试过使用setDateFormat,但这似乎并没有改变任何东西。我目前将时间戳存储在一个LocalDateTime类中,但如果需要可以更改它。

如何强制 Gson 对我的时间戳使用正确的格式?它目前将它们置于这种格式

"start":{
  "date":{"year":2011,"month":1,"day":2},
  "time":{"hour":10,"minute":4,"second":0,"nano":0}
}

我一般是序列化和 JSON 的新手,所以任何指针都会受到赞赏。

我已经意识到 gson 似乎将我的时间戳分成两个单独的数据块,我怎样才能强制它以正确的格式将它们保持在一起?我需要类型适配器吗?(我不知道它们是如何工作的)

4

1 回答 1

1

如果您对使用库感到满意,Joda Time提供了一个简单的解决方案:

序列化

DateTime dt = new DateTime(2006, 1, 2, 15, 4, 5, 999, DateTimeZone.UTC);
System.out.println(dt);

-------- OUTPUT --------
2006-01-02T15:04:05.999Z

反序列化

DateTime dt = DateTime.parse("2006-01-02T15:04:05.999Z");
System.out.println(dt);

-------- OUTPUT --------
2006-01-02T15:04:05.999Z

至于标准库:在处理时区时,您会使用ZonedDateTime而不是LocalDateTime.

于 2020-01-28T23:22:17.947 回答