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

时间:2015-09-16 13:47:10

标签: java json gson

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

yyyy-mm-dd

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

以下是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的代码:     公共类TestObject {

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]

这很简单。

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

1 个答案:

答案 0 :(得分:4)

正确的格式是

yyyy-MM-dd

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

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

Infact GSonBuilder使用与SimpleDateFormat

相同的约定
  

请注意,此模式必须遵守SimpleDateFormat类提供的约定。有关有效日期和时间模式的详细信息,请参阅SimpleDateFormat中的文档。