使用 GSON 反序列化转换 java.sql.Date 不正确

Deserializing with GSON converting java.sql.Date incorrectly

我正在使用 GSON 将 JSON 字符串反序列化为 java 对象。 JSON 字符串中的日期格式为:

yyyy-mm-dd

当日期读入我的 JAVA 对象中的 java.sql.Date 字段时,月份总是以 01 或一月结束!很奇怪。

这是 JSON 字符串的代码并使用 GSON 反序列化:

public static void main(String[] args)
{
    String jsonString = "[{\"date\":\"2015-02-14\"},{\"date\":\"2015-03-15\"},{\"date\":\"2015-04-16\"}]";

    Type type = new TypeToken<List<TestObject>>(){}.getType();
    Gson gsonReceiver = new GsonBuilder().setDateFormat("yyyy-mm-dd").create();
    List<TestObject> objectList = gsonReceiver.fromJson(jsonString, type);

    for(int i=0; i < objectList.size(); i++) {
        System.out.println("objectList[" + i + "] = " + objectList.get(i).toString());          
    }
}

下面是 TestObject 的代码: public class 测试对象 {

private Date date;

public TestObject(Date date) {
    this.date = date;
}

public Date getDate() {
    return date;
}

public void setDate(Date date) {
    this.date = date;
}

@Override
public String toString() {
    return "TestObject [date=" + date + "]";
}

}

如果您 运行 这段代码,新对象中的日期将打印为:

objectList[0] = TestObject [date=2015-01-14]
objectList[1] = TestObject [date=2015-01-15]
objectList[2] = TestObject [date=2015-01-16]

这很奇怪。

我想我已经设置了我应该设置的日期格式 - 有人知道这里出了什么问题吗?

正确的格式是

yyyy-MM-dd

mm 停留几分钟。不是几个月。

这是解释日期格式函数中可以使用的每个字母的 javadoc:link

实际上 GSonBuilder 使用与 SimpleDateFormat 相同的约定:

Note that this pattern must abide by the convention provided by SimpleDateFormat class. See the documentation in SimpleDateFormat for more information on valid date and time patterns.