我正在使用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
(省略毫秒)我得到了正确的结果,但没有毫秒值。 我可以接受,但如果有人能解释这个问题就更好了。
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();