关于编程语言中的时间格式和关系型数据中的中时间格式问题的转化一直都是个简单而又不得不权衡的问题,这牵扯到数据库设计和SQL编程和应用程序中时间格式数据的处理的编程,二者总可以交缠在一块儿。java
关于Java中的时间格式和数据库中的时间格式转换在这里先写两个方法:sql
- /**
- *
- * @param utilDate
- * @return
- */
- public static java.sql.Date convertUtilDateToSqlDate(java.util.Date utilDate) {
- java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
- return sqlDate;
- }
- /**
- *
- * @param sqlDate
- * @return
- */
- public static java.util.Date convertSqlDateToUtilDate(java.sql.Date sqlDate){
- java.util.Date utilDate =new java.util.Date(sqlDate.getTime());
- return utilDate;
- }
普通的转换是很容的,可是想要获取到必定的格式就得下些功夫了。数据库
1.从应用程序中向数据库中写入字段类型为Date类型的数据
编程
好比:PreparedStatement.setDate(int ,java.sql.Date)方法 说明:其中的java.sql.Date能够用上面的方法转化获得服务器
好比:TO_DATE(new SimpleDateFormat().format(ud,"yyyy-MM-dd HH:mm:ss"),"YYYY- MM-DD HH24:MI:SS")
能够经过SQL语句进行处理:SQL=“UPDATE TABLENAME SET TIMER = TO_DATE(" "+ TIMEMISS +" ", ' yyyymmddhh24miss' ) WHERR ... ” 注 TIMEMISS 为变量 例如:20080522131223 类型数据库设计
2. 将指定格式的字符串转换为数据库的时间类型java.sql.Date
经过以下方法能够实现:编程语言
方法一:
ide
- public static java.sql.Date convertStringToSqlDate(String formatStr, String timeStr) {
- SimpleDateFormat bartDateFormat = new SimpleDateFormat(formatStr);
- java.sql.Date sqlDate = null;
- try {
- java.util.Date date = bartDateFormat.parse(timeStr);
- sqlDate = new java.sql.Date(date.getTime());
- System.out.println(sqlDate.getTime());
- } catch (Exception ex) {
- System.out.println(ex.getMessage());
- }
- return sqlDate;
- }
方法二:
工具
- String strDate = "2002-08-09";
- StringTokenizer st = new StringTokenizer(strDate, "-");
- java.sql.Date date = new java.sql.Date(Integer.parseInt(st.nextToken()));
这样经过不一样的方式均可以解决这个问题。
3.关于java.sql.Date与java.sql.Date
java.sql.Date是为了配合SQLDATE而设置的数据类型。
“规范化”的java.sql.Date只包含年月日信息,时分秒毫秒都会清零。格式相似:YYYY-MM-DD。
当咱们调用ResultSet的getDate()方法来得到返回值时,java程序会参照"规范"的java.sql.Date来格式化数据库中的数值。所以,若是数据库中存在的非规范化部分的信息将会被劫取。 this
在sun提供的ResultSet.java中这样对getDate进行注释的:
Retrieves the of the designated column in the current row of this <code>ResultSet</code> object as a “java.sql.Date” object in the Java programming language.
若是咱们把一个java.sql.Date值经过PrepareStatement的setDate方法存入数据库时,java程序会对传入的java.sql.Date规范化,非规范化的部分将会被劫取。然而,咱们java.sql.Date通常由java.util.Date转换过来,如:java.sql.Date sqlDate=new java.sql.Date(new java.util.Date().getTime()).
显然,这样转换过来的java.sql.Date每每不是一个规范的java.sql.Date.要保存java.util.Date的精确值,这个时候java.sql.Timestamp.算是一个比较好的选择。
4.一刀切的作法
关于这个作法曾经在我身边发生过一些小小的争议,有一个老师告诉咱们在数据库中使用时间类型的时候通通设置为字符串类型,而另外一个老师是在应用程序开发的告诉咱们那样设计数据库表字段是最不专业的作法。但是最后发现若是在应用程序中将时间数据做为java.util.Date,而在数据库中时间数据字段类型为Date类型,那么在进行时间数据更新或者查询方面都将是上面一大堆的转化方式显的格外有意义。
后来将这个问题想了想,为何没有为关于这两个类型作一个适配器的东西类进行转换,这样不是更方便了。
如今彷佛明白了些。若是数据库中是时间字段的更新来自数据库服务器的操做,那么大可放心的使用数据库中的时间类型,并且从数据库中读出数据在应用程序中转换至关容易和自由;相反,若是数据库中的时间字段的更新来自外部应用程序,那么能够将数据库中的时间类型字段设计为字符串类型,由于对于数据库来说它是服务于应用程序的,并且这样来自外部的时间格式将更容易控制和设置。
5.能够一劳永逸
粗略的想一下没有相似时间格式的转换是应为咱们在实际应用中须要展示的时间格式显示是变幻无穷的,所以只能经过对特定的业务需求进行分析编写一个工具类来处理这些问题,固然这样的工做也是一劳永逸的。
这里列一个处理:
- //得到当前时间,声明时间变量
- Calendar calendar = Calendar.getInstance();
- //获得年
- int year = calendar.get(Calendar.YEAR);
- //获得月,可是,月份要加上1
- int month = calendar.get(Calendar.MONTH) + 1;
- //得到日期
- int day = calendar.get(Calendar.DATE);
- //字符串转换成日期时间格式
- String today = "" + year + "-" + month + "-" + day + "";
好了,时间很少了,一劳永逸是创建在高度的抽象再抽象,分析提取在分析的基础上的。