Gson的分钟值混乱

问题描述 投票:1回答:1

我正在使用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版本。1.8 Gson版本: 2.8.2

Edit2:

改为格式后: yyyy-MM-dd HH:mm:ss (省略毫秒)我得到了正确的结果,但没有毫秒值。 我可以接受,但如果有人能解释这个问题就更好了。

java gson
1个回答
2
投票

GsonBuilder.setDateFormat() 使用 SimpleDateFormat.

而且 SimpleDateFormat 在解析过程中不支持微秒。S 表示miliseconds,也就是小数点后只有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,你最好写一个 自定义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();
© www.soinside.com 2019 - 2024. All rights reserved.