gpt4 book ai didi

java - Gson 搞砸了分钟值

转载 作者:行者123 更新时间:2023-12-04 09:49:20 27 4
gpt4 key购买 nike

我正在使用 gson 将序列化消息转换为对象,但我在将一个属性转换为 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();

对象被正确解析,但开始时间具有不同的分钟和秒值,因为它应该。解析开始时间的结果是: 2020-05-27 05:24:05.61
我错过了什么?

编辑 1 :

Java Version: 1.8
Gson version: 2.8.2



编辑 2 :

After change format to yyyy-MM-dd HH:mm:ss (omitting milliseconds) I got the right result, but without milliseconds value. I can live with that, but it would be nice if someone could still explain this issue.

最佳答案

GsonBuilder.setDateFormat() 用途 SimpleDateFormat .

SimpleDateFormat 解析过程中不支持微秒。 S表示毫秒,表示小数点后只有 3 位。

这是可以证明的。在您的 JSON 中删除微秒并使用 2020-05-27 05:23:43.022作为输入。

输出将是

2020-05-27 05:23:43.022


Timestamp确实支持微秒,如果你想转换 2020-05-27 05:23:43.022610 (以微秒为单位)到 Timestamp ,你最好写一个 custom GSON deserializer

编辑:时间戳示例解串器

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();

关于java - Gson 搞砸了分钟值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62036561/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com