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

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的结构,但是是从根本上解决了问题。当你尝试了各种注解的方式都不能解决的时候,可以用这个方法。






















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值