【问题标题】:Deserializing with GSON converting java.sql.Date incorrectly使用 GSON 反序列化错误地转换 java.sql.Date
【发布时间】:2015-09-16 13:47:10
【问题描述】:

我正在使用 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 的代码: 公共类 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]

这很奇怪。

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

【问题讨论】:

    标签: java json gson


    【解决方案1】:

    正确的格式是

    yyyy-MM-dd
    

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

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

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

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

    【讨论】:

    • 噢!谢谢戴维德——这让我发疯了!汤姆
    • 如果您发现答案有用且正确,您可以投票并使用绿旗选择正确答案。谢谢!
    • 只是等待必要的 12 分钟或它告诉我的任何事情!
    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多