【Hibernate】--时间格式处理

    上篇介绍了使用Hibernate来实现简单的数据插入,在这个过程中,我们需要注意的一个地方就是时间格式问题。之前在做SSH网上商城、DRP时也遇到过类似的问题,下面时间格式的转换做一个小总结。

    在进行插入时间格式数据时,视频实例中直接使用的New Date()方式获取当前时间。但是自己在demo运行过程中,提示时间格式存在问题,将该时间格式打印出来,发现使用的格式如下:    

Tue Aug 23 21:59:41 CST 2016
    在网上商城部分遇到该问题,解决办法是将所有的datetime类型数据改为了string类型,然后将new Date()产生的时间转换为字符串。而这次同样遇到该问题,不想再修改数据格式,经过多次测试,找到如下方法:

    方法一:使用下面语句转换,存在的问题是将util.date转换成了sql.date类型。 

new java.sql.Date(new java.util.Date().getTime());
    方法二:      

   SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");	
   //该user实体中的时间格式是util.date格式		
   user.setCreateTime(formatter.parse( formatter.format(new Date())));
    方法二也存在一些问题,它是将数据进行了两次转换,先转换为时间字符串,然后再转换为时间类型。我们可以发现这个过程就是:时间格式--时间字符串格式--时间格式。

   方法三:

     更换jar包,其实这个方法在学习SSH网上商城时就已经知道,只不过后来自己想用此方法时,发现当时跟我说此方法的人已经忘记换哪个。还好后来有人给我提示,换成mysql-connector-java-5.1.35.jar 版本的jar包(我的项目中使用的是3的版本)。     


    遗留问题:

      很容易看出,方法二是一个重复转换的过程,鉴于这样的转换,做了一个简单测试,发现了一些问题。测试如下:    

package com.tgb.hibernate;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class test {

	/**
	 * 时间格式测试
	 * @param args
	 * @throws ParseException 
	 */
	public static void main(String[] args) throws ParseException {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println(formatter.parse((formatter.format(new Date()))));//两次转换
		System.out.println((formatter.parse((formatter.format(new Date())))).getClass());//两次转换后类型
		System.out.println(new Date());//直接使用
		System.out.println((new Date()).getClass());//new Date()类型
	}

}
    测试结果如下:      

Tue Aug 23 21:59:41 CST 2016
class java.util.Date
Tue Aug 23 21:59:41 CST 2016
class java.util.Date
    我们会发现,在使用转换前与转换后,他们的时间格式、类型都是一样的,但是转换前的无法直接写入数据库,而转换后的数据能写入。到目前为止,还是没能理解这两种的具体区别,有知道的可以给予指导啊。


    小结:

      时间格式问题可以说是我们经常要遇到的问题,当一个问题经常遇到时,我们就不能仅仅限于解决它,还得去探究问题的深层原因以及解决问题方法的原理。在反复学习中,不断的提升自己的认识程度,也锻炼自己的探究能力。 

原文地址:https://www.cnblogs.com/victor-grace/p/7253660.html