Gson反序列化OffsetDateTime的问题

时间:2018-05-02 23:47:29

标签: serialization gson datetimeoffset

我正在使用gson 2.8进行序列化和反序列化当我提供值OffsetDateTime时,我的班级中有"orderTime":"2018-05-02T14:23:00Z"字段我得到的是"2018-05-02T14:23Z"我期待的地方"2018-05-02T14:23:00Z"如果我提供"orderTime":"2018-05-02T14:23:01Z",我会按预期"2018-05-02T14:23:00Z"获得。反正有没有解决这个问题?

这是我的订单类

import com.google.gson.annotations.SerializedName;
import java.time.OffsetDateTime;
public class Order {
    @SerializedName("orderId")
    private String orderId = null;

    @SerializedName("orderType")
    private String orderType = null;

    @SerializedName("orderTime")
    private OffsetDateTime orderTime = null;
    ....
}

1 个答案:

答案 0 :(得分:0)

  

有没有解决这个问题?

没有任何修复。问题是是否存在问题。

2018-05-02T14:23:00Z2018-05-02T14:23Z表示相同的时间点。当秒为0时,它们在格式中是可选的。格式称为ISO 8601.因此您获得了预期的值。

您看到的字符串由OffsetDateTime.toString()生成。没有办法修改此方法的工作方式(即使是覆盖,因为OffsetDateTime是最终类)。

但是有一个修复程序可以看到另一个字符串。使用格式化程序:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXXXX");
    System.out.println(orderTime.format(formatter));

打印:

  

2018-05-02T14:23:00Z

链接: Wikipedia article on ISO 8601