您的位置:首页 > 编程语言 > Java开发

java.util.date java.sql.date java.sql.timestamp[轉]

2012-05-03 22:15 375 查看
java.util.date java.sql.date java.sql.timestamp[轉]

http://hi.baidu.com/zhangyx/blog/item/5fdf0a4f1b9f573caec3ab52.html

整理一:

这里的一片文章,我个人认为讲解的很详细,有对 java.sql.Date的使用还有困惑的请看。

java.sql.Date 只存储日期数据不存储时间数据

// 会丢失时间数据

preparedStatement.setDate(1, new java.sql.Date(date.getTime()));

//可以这样来处理

preparedStatement.setTimestamp(1, new java.sql.Timestamp(new java.util.Date().getTime()));


//想要得到完整的数据,包括日期和时间,可以这样

java.util.Date d = resultSet.getTimestamp(1);

//这样处理更合适一些,可以避免一些潜在Timestamp 问题

java.util.Date d = new java.util.Date(resultSet.getTimestamp(1).getTime());

自己补的话,这样的话:

往数据库存储的时候可以接收 java.util.Date类型 再用getTime()方法得到代表那个Date对象的long值,再以这个long值 构造一个Timestamp对象 存进数据库中。

从存数据库里取的时候,可以先得到Timestamp用他的getTime()方法得到long值,再以这个long值构造一个 java.util.Date对象,这样就可以对这个Date对象操作了。


不如说 new SimpleTimeFormat("yyyyy-MM-dd HH:mm:ss").format()等等

整理二:

用Timestamp来记录日期时间还是很方便的,但有时候显示的时候是不需要小数位后面的毫秒的,这样就需要在转换为String时重新定义格式。

Timestamp转化为String: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义格式,不显示毫秒 Timestamp now = new Timestamp(System.currentTimeMillis());


//获取系统当前时间 String str = df.format(now);


//String转化为Timestamp:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String time = df.format(new Date());


Timestamp ts = Timestamp.valueOf(time);

整理三: 在 ResultSet中我们经常使用的setDate或getDate的数据类型是java.sql.Date,而在平时java程序中我们一般习惯使用 java.util.Date。因此在DAO层我们经常会碰到这俩种数据类型的相互转换,经过了一个下午的折腾,鄙人对两者的转换方法做出了小小总结,希 望大家不吝指教。

两者的关系

java.lang.Object

|

+---java.util.Date

|

+----java.sql.Date

从这个图中我们可以知道java.sql.Date是从java.util.Date继承过来的。


相互转换

1. 使用getTime()函数

这两个类都提供了getTime()函数,用于返回对应的毫秒数(long类型)。利用这个函数可以实现转换:

java.util.Date utilDate = new java.util.Date(sqlDate.getTime()); // sql -> util

java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); // util -> sql


2. 使用SimpleDateFormat类实现转换

SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类。 它允许格式化 (date -> text)、语法分析 (text -> date)和标准化。

SimpleDateFormat dateFormat = new SimpleDateFormate("yyyy-MM-dd HH:mm:ss");

java.util.Date utilDate = dateFormat.parse(sqlDate.toString());


3. 直接转换

由于java.sql.Date是从java.util.Date中继承过来的,所以可以直接用:

utilDate = sqlDate;


4. 另类获得日期的方法:

SimpleDateFormat sy=new SimpleDateFormat("yyyy");

SimpleDateFormat sm=new SimpleDateFormat("MM");

SimpleDateFormat sd=new SimpleDateFormat("dd");

String syear=sy.format(date);

String smon=sm.format(date);

String sday=sd.format(date);


ps: java.util.Date类中的getYear()要加上1900才可得到实际值,getMonth()则要加上1

[b]*******************************************************************************************************************************************
[/b]

java.util.Date和java.sql.Date的区别和相互转化 .

/article/8260455.html

java.util.Date是在除了SQL语句的情况下面使用的。

java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分

它们都有getTime方法返回毫秒数,自然就可以直接构建。

java.util.Date 是 java.sql.Date 的父类,前者是常用的表示时间的类,

我们通常格式化或者得到当前时间都是用他,

后者之后在读写数据库的时候用他,

因为PreparedStament的setDate()的第2参数和ResultSet的getDate()方法的第2个参数都是java.sql.Date。


java.sql.Date转为java.util.Date

java.sql.Date date=new java.sql.Date();

java.util.Date d=new java.util.Date (date.getTime());


java.util.Date转为java.sql.Date

java.util.Date utilDate=new Date();

java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());

java.util.Date utilDate=new Date();

java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());

java.sql.Time sTime=new java.sql.Time(utilDate.getTime());

java.sql.Timestamp stp=new java.sql.Timestamp(utilDate.getTime());


这里所有时间日期都可以被SimpleDateFormat格式化format()

SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

f.format(stp);

f.format(sTime);

f.format(sqlDate);

f.format(utilDate)

java.sql.Date sqlDate=java.sql.Date.valueOf(" 2005-12-12");

utilDate=new java.util.Date(sqlDate.getTime());


另类取得年月日的方法:

import java.text.SimpleDateFormat;

import java.util.*;

java.util.Date date = new java.util.Date();

//如果希望得到YYYYMMDD的格式SimpleDateFormat

sy1=new SimpleDateFormat("yyyyMMDD");

String dateFormat=sy1.format(date);

//如果希望分开得到年,月,日SimpleDateFormat

sy=new SimpleDateFormat("yyyy");

SimpleDateFormat sm=new SimpleDateFormat("MM");

SimpleDateFormat sd=new SimpleDateFormat("dd");

String syear=sy.format(date);

String smon=sm.format(date);

String sday=sd.format(date);


[b]*******************************************************************************************************************************************
[/b]

java.util.date 和 java.sql.date

http://blog.sina.com.cn/s/blog_499e0dbd01008bzz.html

java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类)。

但是为什么java.sql.Date类型的值插入到数据库中Date字段中会发生数据截取呢?

java.sql.Date是为了配合SQL DATE而设置的数据类型。


“规范化”的java.sql.Date只包含年月日信息,时分秒毫秒都会清零。格式类似:YYYY-MM-DD

当我们调用ResultSet的getDate()方法来获得返回值时,


java程序会参照"规范"的java.sql.Date来格式化数据库中的数值。

因此,如果数据库中存在的非规范化部分的信息将会被劫取。

在sun提供的ResultSet.java中这样对getDate进行注释的:

Retrieves the value 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.

http://www.thunderguy.com/semicolon/2003/08/14/java-sql-date-is-not-a-real-date/文章中提到,要保存java.util.Date的精确值,我们需要利用java.sql.Timestamp.

java.util.Date 就是在除了SQL语句的情况下面使用


java.sql.Date 是针对SQL语句使用的,它只包含日期而没有时间部分

它都有getTime方法返回毫秒数,自然就可以直接构建

java.util.Date d = new java.util.Date(sqlDate.getTime());

...

java.util.Date 是 java.sql.Date 的父类(注意拼写)

前者是常用的表示时间的类,我们通常格式化或者得到当前时间都是用他

后者之后在读写数据库的时候用他,

因为PreparedStament的setDate()的第2参数和ResultSet的getDate()方法的第2个参数都是java.sql.Date

转换是

java.sql.Date date=new java.sql.Date();

java.util.Date d=new java.util.Date (date.getTime());

反过来是一样的

继承关系:java.lang.Object -> java.util.Date -> java.sql.Date


具体的转换关系就是java.util.Date d=new java.util.Date (new Java.sql.Date());

SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

java.util.Date utilDate=new Date();

java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());

java.sql.Time sTime=new java.sql.Time(utilDate.getTime());

java.sql.Timestamp stp=new java.sql.Timestamp(utilDate.getTime());

System.out.println(utilDate.getYear());


这里所有时间日期都可以被SimpleDateFormat格式化format()

f.format(stp);f.format(sTime);f.format(sqlDate);f.format(utilDate)

java.sql.Date sqlDate=java.sql.Date.valueOf("2005-12-12");

utilDate=new java.util.Date(sqlDate.getTime());

另类取得年月日的方法:

import java.text.SimpleDateFormat;

import java.util.*;

java.util.Date date = new java.util.Date();

//如果希望得到YYYYMMDD的格式SimpleDateFormat

sy1=new SimpleDateFormat("yyyyMMDD");

String dateFormat=sy1.format(date);

//如果希望分开得到年,月,日SimpleDateFormat

sy=new SimpleDateFormat("yyyy");

SimpleDateFormat sm=new SimpleDateFormat("MM");

SimpleDateFormat sd=new SimpleDateFormat("dd");

String syear=sy.format(date);

String smon=sm.format(date);

String sday=sd.format(date);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: