java设置Date的json输出格式的问题 本帖最后由 JiangYouJiShiYou 于 2013-01-24 12:03:15 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不想多说什么直接给代码好了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; } } 没看懂你的,反正我一般是这样写的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(); } } 我发现我的代码根本就没有经过JsonValueProcessor,因为那两个println都没有运行到,可能是什么原因?我换成注册JsonBeanProcessor却可以经过,会是什么原因呢? 你的bean中的Date是不是用了java.sql.Date类型不是java.util.Date 我明白了,JSONObject jsonObject = JSONObject.fromObject(new Date(),config); 这样写是不会经过JsonValueProcessor的,因为是在Bean里面检测到有Date类才会经过JsonValueProcessor的,而这里是将Date本身作为一个Bean,所以在Bean类里面不会检测到有Date类,而我改成把Date封装在一个Bean里面就可以了。 版主,这个 具体是怎么改 。我也遇到了你一样的问题 。求赐教 ,谢谢他的意思就是如下代码:将你的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"} JSONObject obj= new JSONObject();orderObject.put("date", xx.getCreateDate().toString());System.out.println(obj.toString()); ajax和table同时显示值时怎么办? dwr怎么样将一个list里面的对象转换出来,js里拿到数组里对象的属性值 文件链接下载后如何动态命名? 救命啊!java.exe占用cpu100%,weblogic启动不能! 请教iframe中的参数传递。谢谢 菜鸟上路:请高手给我一个连接池吧,谢谢! 怎样调用BEAN中的两个方法? 怎样上传文件到数据库中 望Javascript的前辈提供一个符合条件的combobox控件! 哪位大神帮看下这个错误。。。 validationEngine验证 接口返回的xml字符转码问题
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;
} }
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();
}
}
我发现我的代码根本就没有经过JsonValueProcessor,因为那两个println都没有运行到,可能是什么原因?我换成注册JsonBeanProcessor却可以经过,会是什么原因呢?
版主,这个 具体是怎么改 。我也遇到了你一样的问题 。求赐教 ,谢谢他的意思就是如下代码:将你的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"}
orderObject.put("date", xx.getCreateDate().toString());
System.out.println(obj.toString());