将LocalDateTime序列化和反序列化为RFC 3339格式的JSON,在Java中使用Gson

问题描述 投票:0回答:1

我目前正在尝试将一些包含时间戳的数据库对象存储到图形数据库(dgraph)中。我想使用JSON轻松获取日期和时间信息,并将其存储在图中的datetime节点中,但是该图将仅接受以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似乎将我的时间戳分为两个单独的数据块,如何强制它以正确的格式将它们保持在一起?我需要类型适配器吗? (我不知道它们如何工作)

java json gson java-time dgraph
1个回答
0
投票

如果您满意使用库,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

反序列化

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

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

关于标准库:在处理时区时,您将使用ZonedDateTime而不是ZonedDateTime

© www.soinside.com 2019 - 2024. All rights reserved.