含有Date和Timestamp的Java和Json互相转化
工程

代码
package com.my.json.helper; import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date; import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
/**
* 将Bean中的Timestamp、Date转换为json中的日期字符串
* @author zhangyi
*
*/
public class DateJsonValueProcessor implements JsonValueProcessor {
public static final String Default_DATE_PATTERN ="yyyy-MM-dd";
private DateFormat dateFormat ;
public DateJsonValueProcessor(String datePattern){
try{
dateFormat = new SimpleDateFormat(datePattern);}
catch(Exception e ){
dateFormat = new SimpleDateFormat(Default_DATE_PATTERN);
}
}
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
return process(value);
}
public Object processObjectValue(String key, Object value,JsonConfig jsonConfig) {
return process(value);
}
private Object process(Object value){
return dateFormat.format((Date)value);
}
}
package com.my.json.helper; import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import net.sf.ezmorph.MorphException;
import net.sf.ezmorph.object.AbstractObjectMorpher; /**
* 将json串中的日期字符串转换为bean中的Timestamp、Date
*
* @author zhangyi
*
*/
public class TimestampMorpher extends AbstractObjectMorpher {
/*** 日期字符串格式 */
private String[] formats; public TimestampMorpher(String[] formats) {
this.formats = formats;
} public Object morph(Object value) {
if (value == null) {
return null;
}
if (Timestamp.class.isAssignableFrom(value.getClass())) {
return (Timestamp) value;
}
if (!supports(value.getClass())) {
throw new MorphException(value.getClass() + " 是不支持的类型");
}
String strValue = (String) value;
SimpleDateFormat dateParser = null;
for (int i = 0; i < formats.length; i++) {
if (null == dateParser) {
dateParser = new SimpleDateFormat(formats[i]);
} else {
dateParser.applyPattern(formats[i]);
}
try {
return new Timestamp(dateParser.parse(strValue.toLowerCase()).getTime());
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
} @Override
public Class morphsTo() {
return Timestamp.class;
} public boolean supports(Class clazz) {
return String.class.isAssignableFrom(clazz);
} }
package com.my.json.helper; import java.sql.Timestamp; import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.JSONUtils; public class Util { public static Object jsonToBean(String json,Class cls) {
String[] formats = { "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd" };
JSONUtils.getMorpherRegistry().registerMorpher(new TimestampMorpher(formats));
JSONObject jsonObject = JSONObject.fromObject(json);
return JSONObject.toBean(jsonObject, cls);
} public static String beanToJson(Object obj,String dateFormat) {
JsonConfig config = new JsonConfig();
config.registerJsonValueProcessor(Timestamp.class, new DateJsonValueProcessor(dateFormat));
JSONObject json = JSONObject.fromObject(obj, config);
return json.toString();
} }
package com.my.json.helper;
import java.sql.Timestamp;
public class Student {
private int id;
private String name;
private int age;
private Timestamp birthday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Timestamp getBirthday() {
return birthday;
}
public void setBirthday(Timestamp birthday) {
this.birthday = birthday;
}
}
package com.my.json.helper;
import java.sql.Timestamp;
public class JsonTest {
public static void main(String[] args) {
Student s = new Student();
s.setId(123456);
s.setName("李四");
s.setAge(20);
Timestamp b = Timestamp.valueOf("1992-10-19 23:52:18");//设置Timestamp、Date类型的值
s.setBirthday(b);
//含有Timestamp、Date的bean转化为Json
String jsonStr = Util.beanToJson(s,"yyyy-MM-dd HH:mm:ss");
System.out.println(jsonStr);
//json转为bean(含有Timestamp、Date)
Student s1 = (Student)Util.jsonToBean(jsonStr,Student.class);
System.out.println(s1.getBirthday().toLocaleString());
}
}
含有Date和Timestamp的Java和Json互相转化的更多相关文章
- 含有Date属性的对象转化为Json
含有Date类型属性的对象,转化为Json,Date属性并不是时间戳格式. 解决方法: 使用Jackson的注解@JsonFormat,添加到对象属性上方即可. 我们的北京时间会相差8个小时,因为我们 ...
- jackson/fastjson、mybatis、mysql date/datatime/timestamp、java Date/Timestamp关系详解
jackson/fastjson序列化/反序列化: 默认情况下,jackson/fastjson将java Date/Timestamp类型序列化为时间戳,也就是1970年1月1日0点以来的毫秒数.如 ...
- JavaBean和json数据之间的转换(二)含有date类型的JavaBean
1.前言 上次讲了简单的JavaBean和json格式之间的转换,代码很简单,但是实际过程中,往往用到的JavaBean都是比较复杂的,其他的字段还好,如果JavaBean中包含了date类型的字段, ...
- Java:String和Date、Timestamp之间的转
Java:String和Date.Timestamp之间的转 一.String与Date(java.util.Date)互转 1.1 String -> Date String dateStr ...
- Java:String和Date、Timestamp之间的转换
一.String与Date(java.util.Date)互转 1.1 String -> Date String dateStr = "2016-9-28 12:25:55" ...
- Spring 整合 Flex (BlazeDS)无法从as对象 到 Java对象转换的异常:org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.util.Date' to required type 'java.sql.Timestamp' for property 'wfsj'; nested exception is java.lang.Ill
异常信息如下: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value ...
- Java含有Date的对象序列化网络传输
与短信接口对接时,Date从我这边传输以及在短信平台接收后转换出了问题 传入一个TemplateRequest对象 Feign接口 将含有Date的将要传输的TemplateRequest加上@Req ...
- [java]String和Date、Timestamp之间的转换
一.String与Date(java.util.Date)互转 1.1 String -> Date Date date = DateFormat.parse(String str); St ...
- Java:String和Date、Timestamp之间的转换【转】
原文地址:http://yunnick.iteye.com/blog/1074495 一.String与Date(java.util.Date)互转 1.1 String -> Date Str ...
随机推荐
- hdu 4268 Alice and Bob
Alice and Bob Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tota ...
- 中国排名前100的IT公司 (转)
排序 单位名称 软件收入 1 华为技术有限公司 622360 2 中兴通讯股份有限公司 601331 3 海信集团有限公司 448641 4 UT斯达康通讯有限公司 386763 5 海尔集团 ...
- innobackupex使用实践
先介绍一下环境: MySQL:5.6.19 安装路径:/u01/mysql 数据文件:/u01/mysql/data 备份源:/u02/backup 我是异机恢复,和本机操作一样. 一. 全量备份 步 ...
- Mysql --分区表(1)
检查是否支持分区 通过如下命令检查的Mysql是否支持partition mysql> SHOW PLUGINS; ... | ARCHIVE | ACTIVE | STORAGE ENGINE ...
- openssl,db,mysql,sasl编译安装
yum -y install nfs-utils nfs4-acl-tools nfs-utils-libyum -y install gcc gcc* libtool libtools-ltdl l ...
- Android性能优化方法(九)
通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的.一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构.重构的好处有很多,其中一点,就 ...
- vscode调试HTML
使用 live-server npm i -g live-server 注:最好还是把live-server安装成全局,这样在使用时整个项目就是一个站点. Ctrl+` 进入命令行终端 打开帮助提示: ...
- RabbitMQ 连接断开处理-自动恢复
Rabbitmq 官方给的NET consumer示例代码如下,但使用过程,会遇到connection断开的问题,一旦断开,这个代码就会报错,如果你的消费者端是这样的代码的话,就会导致消费者挂掉. u ...
- 【Win10】解决 模拟器调试手机 错误-> 引导阶段... 无法找到指定路径......\2052\msdbgui.dll
去弄几天的Web服务,又弄了几天的CefSharp,都是给其它组的同学做了一下支持,终于又可以回来玩下Win10啦. 今天想试一下UWP在手机上的效果,就找了台WP手机开始升级,结果下载速度遥遥无期, ...
- Android开发笔记
Android 中国SDK: http://wear.techbrood.com/ Android SDK Manager 代理设置: http://www.cnblogs.com/sunzn/p/4 ...