簡體   English   中英

使用Gson在java中將LocalDateTime序列化和反序列化為RFC 3339格式的JSON

[英]Serializing and deserializing LocalDateTime into JSON in RFC 3339 format in java with Gson

我目前正在嘗試將一些包含時間戳的數據庫對象存儲到圖形數據庫 (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 似乎將我的時間戳分成兩個單獨的數據塊,我如何強制它以正確的格式將它們保存在一起? 我需要類型適配器嗎? (我不知道他們是如何工作的)

如果您對使用庫沒問題, 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM