问题描述:
java里面时间类型转换成json数据就成这样了:
"createTime":{"date":30,"day":3,"hours":15,"minutes":14,"month":3,"nanos":0,"seconds"
:38,"time":1209539678000,"timezoneOffset":-480,"year":108}
期望的结果:
将date转化成yyyy-MM-dd形式
解决方案:
注册时间字段处理器,使用jsonconfig:
JsonConfig cfg = new JsonConfig();
cfg.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);//设置自包含我也不知道有什么卵用
cfg.registerJsonValueProcessor(Date.class, new JsonUtil("yyyy-MM-dd HH:mm:ss"));
String json = JSONObject.fromObject(m,cfg).toString();
System.err.println(json);
JsonValueProcessor 在使用时需要对其进行实现 重写processArrayValue processObjectValue两个方法
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class JsonUtil implements JsonValueProcessor {
/** * 默认的日期转换格式. */
public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
/** * 日期转换器. */
private DateFormat dateFormat;
/**
* 构造方法.
*
* @param datePattern 日期格式
*/
public JsonUtil(String datePattern) {
try {
dateFormat = new SimpleDateFormat(datePattern);
} catch (Exception ex) {
dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
}
}
/**
* 默认构造方法
* 创建一个新的实例 DatejsJsonValueProcessor.
*
*/
public JsonUtil() {
dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
}
/**
* 转换数组
* @param value Object
* @param jsonConfig 配置
* @return Object
*/
@Override
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
return process(value);
}
/**
* 转换对象.
* @param key String
* @param value Object
* @param jsonConfig 配置
* @return Object
*/
@Override
public Object processObjectValue(String key, Object value,
JsonConfig jsonConfig) {
return process(value);
}
/**
* 格式化日期.
* @param value Object
* @return Object
*/
private Object process(Object value) {
try {
/*if(value instanceof BigDecimal){
return ((BigDecimal)value).toString();
}else */if(value instanceof Calendar){
return dateFormat.format(new Timestamp(((java.util.Calendar) value).getTimeInMillis()));
}else{
return dateFormat.format((Date)value);
}
} catch (Exception ex) {
return null;
}
}
}
如果不复用可采用内部类的方式
JsonConfig config = new JsonConfig();
config.registerJsonValueProcessor(Date.class, new JsonValueProcessor() {
// 自定义日期格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
/**
* 处理单个Date对象
*/
public Object processObjectValue(String propertyName, Object date, JsonConfig config) {
return simpleDateFormat.format(date);
}
@Override
/** * 处理数组中的Date对象 */
public Object processArrayValue(Object date, JsonConfig config) {
return simpleDateFormat.format(date);
}
});