package com.alibaba.json.bvt.bug; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.TimeZone; import org.junit.Assert; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import junit.framework.TestCase; public class Bug_for_issue_331 extends TestCase { protected void setUp() throws Exception { JSON.defaultTimeZone = TimeZone.getTimeZone("Asia/Shanghai"); JSON.defaultLocale = Locale.CHINA; } public void test_for_issue() throws Exception { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", JSON.defaultLocale); format.setTimeZone(JSON.defaultTimeZone); Date date = format.parse("2015-05-23"); Calendar c = Calendar.getInstance(JSON.defaultTimeZone, JSON.defaultLocale); c.setTime(date); Model original = new Model(); original.setDate(date); original.setCalendar(c); String json = JSON.toJSONString(original, SerializerFeature.UseISO8601DateFormat); System.out.println(json); //V1.2.4 输出{"calendar":"2015-05-23","date":"2015-05-23"} , V1.2.6 输出{"calendar":"2015-05-23+08:00","date":"2015-05-23+08:00"} Model actual = JSON.parseObject(json, Model.class); Assert.assertNotNull(actual); Assert.assertNotNull(actual.getDate()); Assert.assertNotNull(actual.getCalendar()); Assert.assertEquals("与序列化前比较不相等", original.getDate(), actual.getDate()); Assert.assertEquals("序列化后的Date 和 Calendar 不相等", actual.getDate(), actual.getCalendar().getTime()); } public static class Model { private Date date; private Calendar calendar; public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public Calendar getCalendar() { return calendar; } public void setCalendar(Calendar calendar) { this.calendar = calendar; } } }