簡體   English   中英

Gson 弄亂了分鍾值

[英]Gson mess up with minute value

我正在使用 gson 將序列化消息轉換為 object,但是將一個屬性轉換為java.sql.Timestamp時遇到問題

JSON 中的開始時間屬性為

{...other_fields, "start_time": "2020-05-27 05:23:43.022610"}

我的 Gson 解析器就是這樣初始化的

new GsonBuilder().serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss.S").create();

object 已正確解析,但開始時間應具有不同的分鍾和秒值。 解析開始時間的結果是: 2020-05-27 05:24:05.61

我錯過了什么?

編輯1

Java 版本: 1.8
Gson 版本: 2.8.2

編輯2

將格式更改為yyyy-MM-dd HH:mm:ss (省略毫秒)后,我得到了正確的結果,但沒有毫秒值。 我可以忍受,但如果有人仍然可以解釋這個問題,那就太好了。

GsonBuilder.setDateFormat()使用SimpleDateFormat

並且SimpleDateFormat在解析期間不支持微秒。 S表示毫秒,這意味着小數點后只有 3 位。

這是可以證明的。 在您的 JSON 中刪除微秒並使用2020-05-27 05:23:43.022作為輸入。

Output 將是

2020-05-27 05:23:43.022

Timestamp確實支持微秒,如果你想將2020-05-27 05:23:43.022610 (微秒)轉換為Timestamp ,你最好編寫一個自定義 GSON 反序列化器

編輯:時間戳的示例反序列化器

class TimestampDeserializer implements JsonDeserializer<Timestamp> {

    @Override
    public Timestamp deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        // Handle null checks or format check, etc.
        return Timestamp.valueOf(json.getAsString());
    }
}

用法:

Gson gson = new GsonBuilder().serializeNulls().registerTypeAdapter(Timestamp.class, new TimestampDeserializer()).create();

暫無
暫無

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

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