[英]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.