java.util.Date和mysql日期之间转换

来源:互联网 发布:怎么用u盘导出考勤数据 编辑:程序博客网 时间:2024/06/05 18:14

Pojo里面用的是java.util.Date;MYSQL里面用的是datetime。因为表单提交所有数据都是以字符串的形式传输(如果说错请大神指正),所以在后台接收到前台传来的日期字符串是要转换一下。

/*** 字符串转换成日期* @param str* @return date*/public static Date StrToDate(String str) {     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   Date date = null;   try {    date = format.parse(str);   } catch (ParseException e) {    e.printStackTrace();   }   return date;}  
这样就能正确插入数据库中。


但是当从数据库中取出来的时候,显示总是不正常的。控制台输出是这样子的:Mon Feb 13 18:10:00 CST 2017,浏览器输出是这样子的:1486980600000

通过

/*** 字符串转换成日期* @param str* @return date*/public static Date StrToDate(String str) {     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   Date date = null;   try {    date = format.parse(str);   } catch (ParseException e) {    e.printStackTrace();   }   return date;}

转码时候,控制台输出是这样子的:2017-02-13 18:10:00,然而浏览器输出还是这样子的:1486980600000

因为整体的转换都是用阿里的fastjson,所以觉得它应该有专门针对Date类型的封装。果然,最后在Pojo的Date上加上@JSONField (format="yyyy-MM-dd HH:mm:ss") 注解,比如:

@JSONField (format="yyyy-MM-dd HH:mm:ss") //日期格式可以自己设定

private Date birthday;

前台显示了我想要的样子:2017-02-13 18:10:00。

还有很多的序列化我没看懂。有兴趣的可以看一下。


在往后的开发中,我还遇到了一个问题,就是springMVC前台传来的Date类型数据,由于与POJO里类型不匹配,所以页面直接报400。奇怪得不行。最后是直接对POJO的Date字段进行改造!具体改造如下:

public void setBegintime(begintime) {
this.begintime =begintime;}改成:public void setBegintime(String begintime) {
if("".equels(begintime) || begintime == null) {
this.begintime = "";
}
this.begintime = DateUtils.StrToDate(begintime);}
参数类型改成String类型,并使用上面说的日期转换工具进行转换。改造setter方法只能解决后台接收参数400问题。但是前台读取数据库Date字段时,还是不能正常显示。
所以还需要改造一getter。也是直接对POJO的对应字段进行改造:

public Date getBegintime() {return begintime;}
改成:    
public String getBegintime() {
if("".equels(begintime) || begintime == null) {
return "";
}
return DateUtils.DateToStr(begintime);}

返回值类型改成String类型,并使用Date工具类进行转换一下。完美解决。

个人觉得这虽然是破坏了POJO的结构,但是是从根本上解决了问题。当你尝试了各种注解的方式都不能解决的时候,可以用这个方法。





















                                             
1 0