java处理timestamp以及和date转换关系的总结.docx

上传人:b****1 文档编号:15063549 上传时间:2023-06-30 格式:DOCX 页数:19 大小:30.16KB
下载 相关 举报
java处理timestamp以及和date转换关系的总结.docx_第1页
第1页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第2页
第2页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第3页
第3页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第4页
第4页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第5页
第5页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第6页
第6页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第7页
第7页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第8页
第8页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第9页
第9页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第10页
第10页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第11页
第11页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第12页
第12页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第13页
第13页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第14页
第14页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第15页
第15页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第16页
第16页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第17页
第17页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第18页
第18页 / 共19页
java处理timestamp以及和date转换关系的总结.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

java处理timestamp以及和date转换关系的总结.docx

《java处理timestamp以及和date转换关系的总结.docx》由会员分享,可在线阅读,更多相关《java处理timestamp以及和date转换关系的总结.docx(19页珍藏版)》请在冰点文库上搜索。

java处理timestamp以及和date转换关系的总结.docx

java处理timestamp以及和date转换关系的总结

Java中Date及Timestamp时间相关内容(基本上看这一份就可以了)

java.util.datejava.sql.datejava.sql.timestamp

整理一:

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

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

//会丢失时间数据

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

//可以这样来处理

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

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

java.util.Dated=resultSet.getTimestamp

(1);

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

java.util.Dated=newjava.util.Date(resultSet.getTimestamp

(1).getTime());

自己补的话

这样的话:

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

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

不如说newSimpleTimeFormat("yyyyy-MM-ddHH:

mm:

ss").format()等等

 

整理二:

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

      Timestamp转化为String:

SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-ddHH:

mm:

ss");//定义格式,不显示毫秒Timestampnow=newTimestamp(System.currentTimeMillis());//获取系统当前时间Stringstr=df.format(now);      String转化为Timestamp:

SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-ddHH:

mm:

ss");

Stringtime=df.format(newDate());Timestampts=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.DateutilDate=newjava.util.Date(sqlDate.getTime());  //sql->util

   java.sql.DatesqlDate=newjava.sql.Date(utilDate.getTime());  //util->sql

2.使用SimpleDateFormat类实现转换

SimpleDateFormat是一个以国别敏感的方式格式化和分析数据的具体类。

它允许格式化(date->text)、语法分析(text->date)和标准化。

SimpleDateFormatdateFormat=newSimpleDateFormate("yyyy-MM-ddHH:

mm:

ss");

java.util.DateutilDate=dateFormat.parse(sqlDate.toString());

3.直接转换

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

utilDate=sqlDate;

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

SimpleDateFormatsy=newSimpleDateFormat("yyyy");

SimpleDateFormatsm=newSimpleDateFormat("MM");

SimpleDateFormatsd=newSimpleDateFormat("dd");

Stringsyear=sy.format(date);

Stringsmon=sm.format(date);

Stringsday=sd.format(date);

ps:

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

有关java中的Date,String,Timestamp之间的转化问题

一.获取系统当前时间:

1.System.out.println(newTimestamp(newjava.util.Date().getTime));   //包含时分秒

2.System.out.println(newjava.sql.Date(newjava.util.Date().getTime));   //不包含时分秒

3.通过格式化类获取任意格式的时间

 SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddkk:

mm:

ssSSS");Stringtime=sdf.format(Calendar.getInstance().getTime());System.out.println(time);

sql包的Date类没有无参的构造函数,而util的Date类有无参的构造函数

java.util.Datedate=newjava.util.Date();是正确的  //TueJun1509:

04:

23CST2010

java.sql.Datedate=newjava.sql.Date();是错误的

但是sql包的Date有一个带long型参数的构造函数,因此可以使用以下方式

 

 

 java.sql.Datedate=newjava.sql.Date(newjava.util.Date().getTime());  //2010-6-17

 

newjava.util.Date():

构造函数没有接受任何参数.而这个构造函数在内部使用了System.currentTimeMillis()方法来从系统获取日期.下面是util包的Date的构造方法:

publicDate(){this(System.currentTimeMillis());}

 

 

 

还发现一件怪异的事情:

//String转化成dateStringstr="9-29-2001";

System.out.println(java.sql.Date.valueOf(str));

输出:

0016-10-21

真是奇怪.

三.Date转化成String

//Date转化成String:

SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:

mm:

ssSSS");

System.out.println(sdf.format(newDate()));

输出:

2010-06-1716:

30:

21781

四.Timestamp转化成String

SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-ddHH:

mm:

ss");//定义格式,不显示毫秒

Timestampnow=newTimestamp(System.currentTimeMillis());//获取系统当前时间

Stringstr=df.format(now);

System.out.println(str);

输出:

2010-06-1716:

46:

34

五.String转化成Timestamp

SimpleDateFormatdf1=newSimpleDateFormat("yyyy-MM-ddHH:

mm:

ss");

java.util.Datedate11=df1.parse("2010-6-216:

10:

38.00");

Stringtime=df1.format(date11);

Timestampts=Timestamp.valueOf(time);

System.out.println(ts);

输出:

 2010-06-0216:

10:

38.0

 

引用

还发现一件怪异的事情:

//String转化成dateStringstr="9-29-2001";

System.out.println(java.sql.Date.valueOf(str));

Date#valueOf(String)的String格式都是yyyy-mm-dd.

引用

五.String转化成Timestamp

SimpleDateFormatdf1=newSimpleDateFormat("yyyy-MM-ddHH:

mm:

ss");

java.util.Datedate11=df1.parse("2010-6-216:

10:

38.00");

Stringtime=df1.format(date11);

Timestampts=Timestamp.valueOf(time);

System.out.println(ts);

这样的构造是没有效率的,Timestamp是java.util.Date的子类,可以这么做:

newTimestamp(java.util.Date#getTime());

段箭*残箫写道

还发现一件怪异的事情:

//String转化成dateStringstr="9-29-2001"; 

System.out.println(java.sql.Date.valueOf(str));

输出:

0016-10-21

真是奇怪.

你从 公元9年1月1日算起,加上2001天,和29个月,时间就是 公元16年10月21日

Timestamp是由java.util.Date和单独的毫微秒值组成。

只有整数秒才会存储在java.util.Date组件中。

小数秒(毫微秒)是独立存在的。

传递java.util.Date类型的值时,Timestamp.equals(Object)方法永远不会返回true,因为日期的毫微秒组件是未知的。

鉴于Timestamp类和上述java.util.Date类之间的不同,建议代码一般不要将Timestamp值视为java.util.Date的实例。

Timestamp和java.util.Date之间的继承关系实际上指的是实现继承,而不是类型继承。

Timestamp的解释1:

timestamp这个类的构造函数是

Java代码

 

1.Timestamp(Date timestamp, CertPath signerCertPath)   

Timestamp(Datetimestamp,CertPathsignerCertPath)

date对象是不需要制定格式的。

我不明白有什么地方需要用到这个类,你完全可以通过long来表示时间。

虽然不理解你的做法,但是如果你要yyyy-mm-ddhh:

mm:

ss

Java代码

 

1.Date d1 = new Date();  

2.SimpleDateFormat smf=new SimpleDateFormat("yyyy-MM-dd HH:

mm:

ss");  

3.String s1=smf.format(d1);  

4.System.out.println(s1);  

Dated1=newDate();

SimpleDateFormatsmf=newSimpleDateFormat("yyyy-MM-ddHH:

mm:

ss");

Strings1=smf.format(d1);

System.out.println(s1);

beneo(架构师)2010-12-31

呵,兄弟,你描述得真的是很难理解:

1、timestamp到底是指数据库的字段类型,还是java中的java.sql.Timestamp类

2、如果你是指数据库查询的比较的话,跟""、null这种值比较是没问题的

3、

构造函数1:

//已不建议使用

@Deprecated

   publicTimestamp(intyear,intmonth,intdate,

    inthour,intminute,intsecond,intnano)

构造函数2:

//time时间对应的毫秒数

publicTimestamp(longtime)

如:

Timestampts=newTimestamp(1293804215328);

4、如果说构建Timestamp对象的话,那么格式有限制的只有这方法了

Timestampts1=Timestamp.valueOf("2010-12-3122:

22:

22");

Timestampts2=Timestamp.valueOf("2010-12-3122:

22:

22.23");

格式必须为:

yyyy-mm-ddhh:

mm:

ss[.f...]

解释2:

一般在页面通过时间查询的时候,在后台获取到的值为字符串,要设置到Date或Timestamp对象中时,需要将时间字符串转化为对象。

Java代码

 

1.import java.sql.Timestamp;  

2.import java.text.DateFormat;  

3.import java.text.ParseException;  

4.import java.text.SimpleDateFormat;  

5.import java.util.Date;  

6.  

7./** 

8. *  

9. */  

10.  

11./** 

12. * @author qiuzj 

13. * 

14. */  

15.public class Test {  

16.  

17.    /** 

18.     * @param args 

19.     * @throws ParseException  

20.     */  

21.    public static void main(String[] args) throws ParseException {  

22.        // 日期时间格式  

23.        DateFormat datetimeDf = new SimpleDateFormat("yyyy-MM-dd HH:

mm:

ss");  

24.  

25.        // 假设这个是从前台查询传过来的时间字符串  

26.        String dateStr = "2010-12-31 22:

22:

22";  

27.  

28.        // 根据日期时间格式将时间字符串转化为对象  

29.        Timestamp ts = Timestamp.valueOf(dateStr);  

30.        Date date = datetimeDf.parse(dateStr);  

31.          

32.          

33.        // 日期  

34.        DateFormat dateDf = new SimpleDateFormat("yyyy-MM-dd");  

35.  

36.        // 日期字符串  

37.        dateStr = "2010-12-31";  

38.          

39.        // 根据日期格式将时间字符串转化为对象  

40.        date = dateDf.parse(dateStr);  

41.        ts = new Timestamp(date.getTime());  

42.          

43.    }  

44.  

45.}  

解释4:

应该仔细的阅读api的,你看在java.sql.Timestamp有个long型的构造函数Timestamp(long),这样的话你可以输入long型的变量,long型的构造请参阅Calendar

此外,将使用JDBC时间戳转义格式的String对象转换为Timestamp值的话,你可以使用Timestamp#valueOf(String)

输入的字符串可以是二者之一,对应不同的精度:

   *yyyy-mm-ddhh:

mm:

ss格式下的字符数

   *yyyy-mm-ddhh:

mm:

ss.[fff...]格式下的字符数(fff表示纳秒)

以上,是回答你的问题,以下是推荐给你的

一般来说,我们可以通过js直接生成yyyy-mm-ddhh:

mm:

ss的字符串的,因为js的时间,我们都是通过日历点出来的,一般都有年月日还有小时分秒,你可以参考以下链接

没有显示小时分秒的多试试几个

beneo(架构师)2011-01-01

Java代码

 

1.public void doPost(HttpServletRequest request, HttpServletResponse response)  

2.            throws ServletException, IOException {  

3.          

4.        Timestamp timeUseForSearchInDatabase = null;   

5.          

6.        //假设你前台传来的用于查询的时间字符串名称为searchDate  

7.        String searchDate = request.getParameter("searchDate");  

8.        //假设你前台传入的日期格式为2010-08-05 11:

20:

12(yyyy-MM-dd HH:

mm:

ss)  

9.        if (null !

= searchDate && !

"".equals(searchDate)) {  

10.            try {  

11.                timeUseForSearchInDatabase = new Timestamp(new SimpleDateFormat("yyyy-MM-dd HH:

mm:

ss").parse(searchDate).getTime());  

12.            } catch (ParseException e) {  

13.                e.printStackTrace();  

14.            }  

15.        }  

16.          

17.        //这时timeUseForSearchInDatabase就可以直接放到Hibernate的实体对应字段中去了  

18.        //其实,hibernate中对应数据库中的DateTime类型,实体中可以采用java.util.Date类型,  

19.        //另外,Hibernate中的timestamp类型的字段是可以为null的,但不能为"";其实""你也注入不进去,因为""是字符串类型的,你所说的前台页面表单中  

20.        //什么也不输时报错,是因为页面中的任何表单不输入内容,传到后台的值将都是字符串"",而不是null,这个你要处理的,你要将""转换成null,  

21.        //你用了SSH,可以使用Struts的过滤器自动过滤,但也可以使用我上面这种方法(虽然有点笨,有点烦,但还是比较实用的)。

  

22.          

23.        /** 

24.         * 下面向你介绍一下我对日期类型的处理办法:

 

25.         * 1、页面前台:

①、使用日期控件,直接限制用户的输入日期格式(html页面中的日期输入控件有很多,我常用My97DatePicker,简介方便),这样前台用户输入的 

26.         *      日期要么是空字符串"",要么是我们预设好的日期格式,传到后台后按照规则解析处理即可。

②、使用js的验证功能强行用户输入指定格式的日期 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2