国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp區(qū)別和聯(lián)系

2019-11-06 08:07:29
字體:
供稿:網(wǎng)友

        在Web開發(fā)中,避免不了對(duì)日期的操作,常用的關(guān)于時(shí)間的類有這么幾個(gè):        java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp,這幾個(gè)類在JDK的定義如下所示:        java.lang.Object         ....|__java.util.Date         ..........|__java.sql.Date/java.sql.Timestamp/java.sql.Time        ....|__java.security.Timestamp        java.util.Date日期格式為:年月日時(shí)分秒         java.sql.Date日期格式為:年月日[只存儲(chǔ)日期數(shù)據(jù)不存儲(chǔ)時(shí)間數(shù)據(jù),是專門針對(duì)sql設(shè)計(jì)]         java.sql.Time日期格式為:時(shí)分秒         java.sql.Timestamp日期格式為:年月日時(shí)分秒納秒(毫微秒)

這些類的關(guān)系如下所示:        java.util.Date這個(gè)類是java.sql.Date,  java.sql.Time,  java.slq.Timestamp這三個(gè)類的父類。這三個(gè)類對(duì)java.util.Date類進(jìn)行了包裝。

        java.sql.Date類屏蔽了java.util.Date類的時(shí)間有關(guān)的方法(形如:hh:mm:ss),因此,不可以通過這個(gè)類訪問時(shí)間有關(guān)的信息,比如,如果你通過sqlDate.getHour()方法去訪問小時(shí)信息,此方法會(huì)拋出一個(gè)IllegalArgumentException異常。這是因?yàn)閖ava.sql.Date在繼承java.util.Date類的時(shí)候?qū)Ω割愡M(jìn)行了重寫,禁用了時(shí)間訪問的方法。之所以這么處理,是為了和數(shù)據(jù)庫的Date數(shù)據(jù)類型相匹配,數(shù)據(jù)庫的Date數(shù)據(jù)類只是保存日期有關(guān)的字段。但是它java.sql.Date類有g(shù)etTime方法返回毫秒數(shù),所以它可以與java.util.Date進(jìn)行互換:

        java.sql.Date轉(zhuǎn)為java.util.Date        java.sql.Date sqlDate=new java.sql.Date();        java.util.Date utilDate=new java.util.Date (sqlDate.getTime());         java.util.Date轉(zhuǎn)為java.sql.Date        java.util.Date utilDate=new Date();        java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());

        java.sql.Time類屏蔽了java.util.Date的日期有關(guān)的字段(形如:yyyy-MM-dd),因此,不能通過這個(gè)類訪問日期有關(guān)的信息,比如:如果你通過sqlTime.getYear()方法去獲取年有關(guān)的信息,此方法會(huì)拋出一個(gè)IllegalArgumentException異常。這是因?yàn)閖ava.sql.Time在繼承java.util.Date類的時(shí)候?qū)Ω割愡M(jìn)行了重寫,禁用了日期訪問的方法。之所以這么處理,是為了和數(shù)據(jù)庫的Time數(shù)據(jù)類型相匹配,數(shù)據(jù)庫的Time數(shù)據(jù)類行只是保存時(shí)間有關(guān)的字段。

        java.sql.date 是只包含了日期。而 java.sql.time 只包含了一個(gè)時(shí)間。java.sql.time java.sql.date 二者如何組合成一個(gè)java.util.date呢?取毫秒相加,作為java.util.date的構(gòu)造方法參數(shù)就可以了。

        java.sql.Date d = new java.sql.Date(new java.util.Date().getTime());        java.sql.Time t = new java.sql.Time(new java.util.Date().getTime());        java.util.Date day = new java.util.Date(d.getTime() + t.getTime());

       java.sql.Timestamp字段則對(duì)java.util.Date這個(gè)類進(jìn)行了擴(kuò)充,它在java.util.Date類的基礎(chǔ)上增加了毫秒的時(shí)間訪問控制,因此,你可以通過getNanos方法去獲取時(shí)間的毫微秒數(shù)(注意此處獲取的時(shí)間是以毫微秒為單位的,1秒等于十億毫微秒),同樣的,這也是為了和數(shù)據(jù)庫中的Timestamp數(shù)據(jù)類型進(jìn)行匹配。

       理清了上述四個(gè)類的關(guān)系,那么java.util.Date和java.util.Calendar類有什么關(guān)系呢?java.util.Calendar類是java.util.Date類的一個(gè)更加深入,更加全面的替代。Java.util.Calendar類支持java.util.Date的所有功能,此外,Calendar還引入了多語言,多區(qū)域的特性,可以根據(jù)需要獲取不同區(qū)域,不同時(shí)區(qū)的時(shí)間,Calendar還增加了比Date更加方便和快捷的許多操作,如獲取一年當(dāng)中的第幾個(gè)星期,各個(gè)月的天數(shù)等便捷的方法。

       Java.util.Calendar區(qū)別與java.util.Date的幾個(gè)地方也需要注意一下:首先,Calendar增加了毫秒的時(shí)間段,通過它可以獲取時(shí)間點(diǎn)的毫秒值,而java.util.Date只是精確到秒。其次,Calendar獲取年的時(shí)候是當(dāng)前年份比如:2010,而Date獲取年份的時(shí)獲取到的是當(dāng)前年份-1900的一個(gè)值(2010-1900=110,因此,你調(diào)用getYear后過去的值就是110)。最后Calendar是一個(gè)抽象類,之所以能夠?qū)嵗且驗(yàn)榇颂幍腃alendar充當(dāng)了一個(gè)類似于工廠的作用,在getInstance方法中實(shí)例化了Calendar子類GregorianCalendar,并把它返回給用戶使用。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 日喀则市| 太白县| 汶川县| 巴东县| 神木县| 静海县| 儋州市| 杭锦旗| 平顶山市| 那曲县| 本溪| 张家川| 金溪县| 土默特左旗| 邓州市| 扬中市| 凤山市| 遵义县| 蒙山县| 淮北市| 永胜县| 长岭县| 丘北县| 商城县| 绥江县| 应城市| 泸州市| 平利县| 溧阳市| 南安市| 靖西县| 青铜峡市| 大宁县| 新和县| 万年县| 娱乐| 托克托县| 荔浦县| 屏边| 二手房| 浦东新区|