使用 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.
我正在使用 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.