我目前正在尝试将一些包含时间戳的数据库对象存储到图形数据库(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似乎将我的时间戳分为两个单独的数据块,如何强制它以正确的格式将它们保持在一起?我需要类型适配器吗? (我不知道它们如何工作)
如果您满意使用库,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
。