content: 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;
          }
          
          
      }
  }
  