本帖最后由 JiangYouJiShiYou 于 2013-01-24 12:03:15 编辑

解决方案 »

  1.   

    不想多说什么直接给代码好了import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;import net.sf.json.JsonConfig;
    import net.sf.json.processors.JsonValueProcessor;/** 
    * JSON 日期格式处理(java转化为JSON) 
    */ 
    public class JsonDateValueProcessor implements JsonValueProcessor {     /** 
         * datePattern 
         */ 
        private String datePattern = "yyyy-MM-dd";     public JsonDateValueProcessor() { 
            super(); 
        }     /** 
         * 可以根据构造传入格式化的格式
         */ 
        public JsonDateValueProcessor(String format) { 
            super(); 
            if(format != null && !"".equals(format)){
             this.datePattern = format; 
            }
        } 
        @Override
        public Object processArrayValue(Object value, JsonConfig jsonConfig) { 
            return process(value); 
        }
        @Override
        public Object processObjectValue(String key, Object value, 
                JsonConfig jsonConfig) { 
            return process(value); 
        } 
    //用于格式化date类型的值
        private Object process(Object value) { 
            try { 
                if (value instanceof Date) { 
                    SimpleDateFormat sdf = new SimpleDateFormat(datePattern, 
                            Locale.CHINESE); 
                    return sdf.format((Date) value); 
                } 
                return value == null ? "" : value.toString(); 
            } catch (Exception e) { 
                return ""; 
            }     }     /** 
         * @return the datePattern 
         */ 
        public String getDatePattern() { 
            return datePattern; 
        }     /** 
         * @param pDatePattern the datePattern to set 
         */ 
        public void setDatePattern(String pDatePattern) { 
            datePattern = pDatePattern; 
        } }
      

  2.   

    没看懂你的,反正我一般是这样写的import java.util.Date;
    import java.text.SimpleDateFormat;public class CurrentDateTime {
    public static void currentDateTime(){
    SimpleDateFormat date = new SimpleDateFormat("YYYY-MM-DD HH-mm-ss E");
    System.out.println(date.format(new Date()));
    }

    public static void main(String[] args){
    currentDateTime();
    }
    }
      

  3.   


    我发现我的代码根本就没有经过JsonValueProcessor,因为那两个println都没有运行到,可能是什么原因?我换成注册JsonBeanProcessor却可以经过,会是什么原因呢?
      

  4.   

    你的bean中的Date是不是用了java.sql.Date类型不是java.util.Date
      

  5.   

    我明白了,JSONObject jsonObject = JSONObject.fromObject(new Date(),config); 这样写是不会经过JsonValueProcessor的,因为是在Bean里面检测到有Date类才会经过JsonValueProcessor的,而这里是将Date本身作为一个Bean,所以在Bean类里面不会检测到有Date类,而我改成把Date封装在一个Bean里面就可以了。
      

  6.   

      
    版主,这个 具体是怎么改  。我也遇到了你一样的问题    。求赐教  ,谢谢他的意思就是如下代码:将你的Date类型再封装一层,比如MyDate,然后用MyDate去解析转化
    1.封装的MyDate类package com.pactera.JSON;import java.util.Date;public class MyDate {
    private Date day; public Date getDay() {
    return day;
    } public void setDay(Date day) {
    this.day = day;
    }
    }package com.pactera.JSON;import java.text.SimpleDateFormat;
    import java.util.Date;import net.sf.json.JSONObject;
    import net.sf.json.JsonConfig;
    import net.sf.json.processors.JsonValueProcessor;public class Test1 {
    public static MyDate date = new MyDate();
    public static void main(String[] args) {
    date.setDay(new Date());
    JsonConfig jsonConfig = new JsonConfig();
    jsonConfig.registerJsonValueProcessor(Date.class, new JsonValueProcessor(){ @Override
    public Object processArrayValue(Object arg0, JsonConfig arg1) {
    // TODO Auto-generated method stub
    return null;
    } @Override
    public Object processObjectValue(String arg0, Object arg1,
    JsonConfig arg2) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    String date = sdf.format(((Date)arg1));
    return date;
    }

    });
    JSONObject jb =JSONObject.fromObject(date, jsonConfig);
    System.out.println(jb.toString());
    }
    }输出结果:  {"day":"2014-05-12T12:54:12"}
      

  7.   

    JSONObject obj= new JSONObject();
    orderObject.put("date", xx.getCreateDate().toString());
    System.out.println(obj.toString());