java中對日期操作datedateformatsimpledateformat方法使用_第1頁
java中對日期操作datedateformatsimpledateformat方法使用_第2頁
java中對日期操作datedateformatsimpledateformat方法使用_第3頁
java中對日期操作datedateformatsimpledateformat方法使用_第4頁
java中對日期操作datedateformatsimpledateformat方法使用_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

java中對日期的操作:datedateformatsimpledateformat的方法的使用java中對日期的操作:datedateformatsimpledateformat的方法的使用java中對日期的操作:datedateformatsimpledateformat的方法的使用java中對日期的操作:DATE,DateFormat,SimpleDateFormat的方法的使用importjava.text.*;//導(dǎo)入包importjava.util.*;//導(dǎo)入包{/*獲取當(dāng)前時(shí)間*@author【轟隆隆】*不熟悉的朋友看看API和下面的實(shí)例就會慢慢理解使用方法了*/publicstaticvoidmain(String[]args){System.out.println("01:"+newDate());System.out.println("02:"+newDate().toLocaleString());//過期!最簡單,但是不介紹使用System.out.println("03:"+DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT).format(newDate()));System.out.println("04:"+DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM).format(newDate()));System.out.println("05:"+DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG).format(newDate()));System.out.println("06:"+DateFormat.getDateInstance(DateFormat.FULL).format(newDate()));System.out.println("07:"+DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL).format(newDate()));y,yy:用2位數(shù)字表示的"年"代替。yyyy:用4位數(shù)字表示的"年"代替。M,MM:用2位數(shù)字表示的"月"代替。MMM:用漢字表示的"月"代替。d,dd:用2位數(shù)字表示的"日"代替。H,HH:用2位數(shù)字表示的"時(shí)"代替。m,mm:用2位數(shù)字表示的"分"代替。s,ss:用2位數(shù)字表示的"秒"代替。E:用"星期"代替pattern中的一般ASCII字符,必定用單引號“'”字符括起來,如:pattern="'time':yyyy-MM-dd";用SimpleDateFormat對象調(diào)用以下方法能夠定制某時(shí)間輸出格式:實(shí)例:SimpleDateFormatsdf=newSimpleDateFormat("'

中華人民共和國時(shí)間

':yyyy

MM

dd日

HH點(diǎn)

mm

分ss秒E",Locale.CHINA);System.out.println("08:"+sdf.format(newDate()));System.out.println("09:"+newSimpleDateFormat("yyyy-MM-ddHH:mm:ssE").format(newDate()));//這種方式比較靈便,格式完好可以自己定Calendarobj=Calendar.getInstance();System.out.println("10:"+obj.get(Calendar.YEAR)+"年"+(obj.get(Calendar.MONTH)+1)+"

月"+

//一月用

0表示,所以獲取的月份要加

1,obj.get(Calendar.DATE)+"日"+obj.get(Calendar.HOUR_OF_DAY)+"時(shí)"+obj.get(Calendar.MINUTE)+"分"+obj.get(Calendar.SECOND)+"秒");System.out.print("11:"+obj.getTime());obj.add(Calendar.MINUTE,30);System.out.println("→再過30分鐘時(shí)辰:"+obj.getTime());}}-----------------------------------------執(zhí)行結(jié)果:01:ThuAug0618:55:30CST200902:2009-8-618:55:3003:09-8-6下午6:5504:2009-8-618:55:3005:2009年8月6日下午06時(shí)55分30秒06:2009年8月6日星期四07:2009年8月6日星期四下午06時(shí)55分30秒CST08:中華人民共和國時(shí)間:2009年08月06日18點(diǎn)55分30秒星期四09:2009-08-0618:55:30星期四10:2009年8月6日18時(shí)55分30秒11:ThuAug0618:55:30CST2009→再過30分鐘時(shí)辰:ThuAug0619:25:30CST2009在Java中最常用的日期時(shí)間操作類有四個(gè):為了精確表達(dá)業(yè)務(wù)邏輯,應(yīng)盡量防備使用父類()的方法。java.sql包下的三個(gè)子類中特有的valueOf()靜態(tài)方法與toString()方法能夠精確表達(dá)業(yè)務(wù)邏輯。系統(tǒng)時(shí)間與當(dāng)?shù)貢r(shí)間在中國地區(qū),若是調(diào)用以下代碼,我們會獲取“1970-01-0108:00:00”的結(jié)果例1java.util.Dateobj1=newjava.util.Date(0L);DateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");System.out.println(dateFormat.format(obj1));//打印結(jié)果:1970-01-0108:00:00 看了JDKAPI此后,您可能會有這樣的疑問,為什么newjava.util.Date(0L)獲取的時(shí)間不是“1970-01-0100:00:00”而是“1970-01-0108:00:00”呢?難到JDKAPI寫錯(cuò)了?JDKAPI

沒有錯(cuò),要點(diǎn)是創(chuàng)辦

對象所使用的毫秒數(shù)是計(jì)算機(jī)系統(tǒng)時(shí)間,該毫秒數(shù)指的是自

1970

年1月1日00:00:00GMT以來的毫秒數(shù),即格林尼治標(biāo)準(zhǔn)時(shí)間(GMT)的1970-01-0100:00:00。但是當(dāng)計(jì)算機(jī)以字符串方式顯現(xiàn)給我們看的時(shí)候,這個(gè)時(shí)間已經(jīng)成為當(dāng)?shù)貢r(shí)間了,比方中國地區(qū)使用GMT+8時(shí)區(qū),所以我們看到的是“1970-01-0108:00:00”的結(jié)果!將上述代碼更正一下,我們就可以獲取一個(gè)更清楚的看法。如:例2java.util.Dateobj1=newjava.util.Date(0L);DateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss'GMT'Z");System.out.println(dateFormat.format(obj1));//打印結(jié)果:1970-01-0108:00:00GMT+0800 上面的代碼我們能夠看到“1970-01-0108:00:00GMT+0800”的結(jié)果,證明我們所處的時(shí)區(qū)在GMT+8區(qū)。當(dāng)我們改變時(shí)區(qū)時(shí),同樣的系統(tǒng)時(shí)間將顯示不同樣的結(jié)果。如:例3java.util.Dateobj1=newjava.util.Date(0L);TimeZone.setDefault(TimeZone.getTimeZone("GMT+0:00"));DateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss'GMT'Z");System.out.println(dateFormat.format(obj1));//打印結(jié)果:1970-01-0100:00:00GMT+0000 上面的代碼我們能夠看到“1970-01-0100:00:00GMT+0000”的結(jié)果,證明現(xiàn)在所處的時(shí)區(qū)在GMT+0區(qū)??傊?jīng)過以上的描述,我們能夠得出這樣幾個(gè)結(jié)論:所有計(jì)算機(jī)的系統(tǒng)時(shí)間看法上是一致的;同樣的系統(tǒng)時(shí)間會依照不同樣的時(shí)區(qū)產(chǎn)生不同樣的當(dāng)?shù)貢r(shí)間;當(dāng)時(shí)區(qū)為GMT+0時(shí),系統(tǒng)時(shí)間與當(dāng)?shù)貢r(shí)間同樣。精確的業(yè)務(wù)邏輯在Java中最常用的日期時(shí)間操作類中java.util.Date是其他三個(gè)類的父類。由于有這樣的繼承關(guān)系,所有四個(gè)類均能夠經(jīng)過系統(tǒng)時(shí)間生成對象。比方:java.util.Dateobj=newjava.sql.Date(0L);這種使用系統(tǒng)時(shí)間作為數(shù)據(jù)產(chǎn)生的日時(shí)對象在業(yè)務(wù)邏輯上可能存在問題。比方在時(shí)區(qū)GMT+0環(huán)境下運(yùn)行以下代碼:例4將時(shí)區(qū)設(shè)置為GMT+0TimeZone.setDefault(TimeZone.getTimeZone("GMT+0:00"));使用傳統(tǒng)構(gòu)造方法生成日時(shí)對象java.util.Dateobj1=newjava.sql.Date(0L);java.util.Dateobj2=newjava.sql.Date(3600000L);業(yè)務(wù)邏輯同樣System.out.println(obj1.toString());//"1970-01-01"System.out.println(obj2.toString());//"1970-01-01"http://語法比較不同樣System.out.println(obj1.equals(obj2));//falseSystem.out.println(pareTo(obj2));//-1 上述代碼產(chǎn)生的兩個(gè)對象在業(yè)務(wù)邏輯上都表示格林尼治標(biāo)準(zhǔn)時(shí)間1970-01-01(00:00:00),但在語法上二者時(shí)間卻相差小時(shí)。出現(xiàn)這種現(xiàn)象的根根源因在于使用了不精確的系統(tǒng)時(shí)間來反響日時(shí)對象的業(yè)務(wù)邏輯。所謂日時(shí)對象的業(yè)務(wù)邏輯,就是以當(dāng)?shù)貢r(shí)間作為標(biāo)準(zhǔn)的日時(shí)信息。比方描述格林尼治標(biāo)準(zhǔn)時(shí)間(GMT+0)1970-01-0100:00:00的精確系統(tǒng)時(shí)間是0L毫秒;描述北京時(shí)間(GMT+8)1970-01-0100:00:00的精確系統(tǒng)時(shí)間則是-28800000L毫秒。除java.util.Date外,其他三個(gè)類均有屬于自己的業(yè)務(wù)范圍,比方:java.sql.Date的有效成份包括年、月、日java.sql.Time的有效成份包括時(shí)、分、秒java.sql.Timestamp的有效成份包括年、月、日、時(shí)、分、秒、納秒(毫微秒)由于四種日時(shí)對象內(nèi)部均使用細(xì)化到毫秒的系統(tǒng)時(shí)間作為標(biāo)準(zhǔn)數(shù)據(jù),必定會造成使用不同樣的系統(tǒng)時(shí)間能夠表達(dá)同樣業(yè)務(wù)邏輯的現(xiàn)象。那么經(jīng)過什么方式能夠?qū)⒁粋€(gè)不精確的系統(tǒng)時(shí)間變換成能夠正確表達(dá)業(yè)務(wù)邏輯的精確系統(tǒng)時(shí)間呢?使用toString()來獲取日時(shí)對象的業(yè)務(wù)邏輯在繼承自的三個(gè)子類中,傳統(tǒng)的構(gòu)造方法以及getTime()和setTime()兩個(gè)方法均使用系統(tǒng)時(shí)間來實(shí)現(xiàn),也就注定了它們在業(yè)務(wù)邏輯上的不精確性。若是已經(jīng)使用了不精確的系統(tǒng)時(shí)間創(chuàng)辦java.sql包中的日時(shí)對象,則toString()是唯一個(gè)能夠獲取精確業(yè)務(wù)邏輯的方法。例4的代碼能夠說明這一點(diǎn)。使用valueOf()構(gòu)造精確的日時(shí)對象為了能夠從實(shí)質(zhì)上使用精確系統(tǒng)時(shí)間來正確表達(dá)日時(shí)對象中的業(yè)務(wù)邏輯,除java.util.Date外,其他三個(gè)類均供應(yīng)了第二個(gè)生成對象的方法,那就是valueOf()靜態(tài)方法。比方:java.util.Dateobj1=java.sql.Date.valueOf("2000-01-01");經(jīng)過傳達(dá)一個(gè)正確表達(dá)日時(shí)信息的字符串,valueOf()將產(chǎn)生一個(gè)由精確系統(tǒng)時(shí)間構(gòu)成的能夠反響正確業(yè)務(wù)邏輯的日時(shí)對象。同樣,這種精確的日時(shí)對象也能夠在語法進(jìn)步行精確的比較判斷,比方:例5使用valueOf()生成日時(shí)對象java.util.Dateobj1=java.sql.Date.valueOf("2000-01-01");使用精確系統(tǒng)時(shí)間生成日時(shí)對象java.util.Dateobj2=newjava.sql.Date(obj1.getTime());業(yè)務(wù)邏輯正確System.out.println(obj1.toString());//"2000-01-01"System.out.println(obj2.toString());//"2000-01-01"語法比較正確System.out.println(obj1.equals(obj2));//trueSystem.out.println(pareTo(obj2));//0 經(jīng)過對valueOf()和toString()的認(rèn)識,我們自然會想到一種變換方式,能夠?qū)⒉痪_的系統(tǒng)時(shí)間變換成能夠正確表達(dá)業(yè)務(wù)邏輯的精確系統(tǒng)時(shí)間。以下面的工具類:publicclassDateTimeUtils{/獲取能夠精確表達(dá)業(yè)務(wù)邏輯的日時(shí)對象**@paramobj*不精確的日時(shí)對象*@return精確的日時(shí)對象*/publicstaticjava.sql.DategetLocalDate(java.util.Dateobj){if(obj==null)returnnull;java.sql.Datetmp=null;if(java.sql.Date.class.equals(obj.getClass())){//若是原始日時(shí)對象的種類是則變換過程分兩步://第一步,獲取對象的精確業(yè)務(wù)邏輯值StringtmpString=obj.toString();第二步,生成能夠精確反響業(yè)務(wù)邏輯的日時(shí)對象tmp=java.sql.Date.valueOf(tmpString);}else{若是原始日時(shí)對象的種類不是則變換過程分三步:第一步,生成一個(gè)不能夠精確表達(dá)業(yè)務(wù)邏輯的對象obj=newjava.sql.Date(obj.getTime());第二步和第三步與辦理java.sql.Date種類的原始日時(shí)對象同樣第二步,獲取java.sql.Date對象的精確業(yè)務(wù)邏輯值StringtmpString=obj.toString();第三步,生成能夠精確反響業(yè)務(wù)邏輯的日時(shí)對象tmp=java.sql.Date.valueOf(tmpString);}returntmp;}} 上述方法能夠簡化為:publicstaticjava.sql.DategetLocalDate(java.util.Dateobj){if(obj==null)returnnull;java.sql.Datetmp=null;if(java.sql.Date.class.equals(obj.getClass())){tmp=java.sql.Date.valueOf(obj.toString());}else{tmp=getLocalDate(newjava.sql.Date(obj.getTime()));}returntmp;} 依照同樣道理,也能夠獲取變換與日時(shí)對象的方法。最后的版本以下:publicclassDateTimeUtils{/*獲取能夠精確表達(dá)業(yè)務(wù)邏輯的日期對象<br>**若是原始日時(shí)對象的種類是java.sql.Date<br>則變換過程分兩步:<br>第一步,獲取java.sql.Date對象的精確業(yè)務(wù)邏輯值<br>第二步,生成能夠精確反響業(yè)務(wù)邏輯的日時(shí)對象<br>*若是原始日時(shí)對象的種類不是java.sql.Date<br>則變換過程分三步:<br>第一步,生成一個(gè)不能夠精確表達(dá)業(yè)務(wù)邏輯的對象<br>第二步和第三步與辦理java.sql.Date種類的原始日時(shí)對象同樣**@paramobj*不精確的日期對象*@return精確的日時(shí)對象*/publicstaticjava.sql.DategetLocalDate(java.util.Dateobj){if(obj==null)returnnull;java.sql.Datetmp=null;if(java.sql.Date.class.equals(obj.getClass())){tmp=java.sql.Date.valueOf(obj.toString());}else{tmp=getLocalDate(newjava.sql.Date(obj.getTime()));}returntmp;}publicstaticjava.sql.TimegetLocalTime(java.util.Dateobj){if(obj==null)returnnull;java.sql.Timetmp=null;if(java.sql.Time.class.equals(obj.getClass())){tmp=java.sql.Time.valueOf(obj.toString());}else{tmp=getLocalTime(newjava.sql.Time(obj.getTime()));}returntmp;}getLocalTimestamp(java.util.Dateobj){if(obj==null)returnnull;java.sql.Timestamptmp=null;if(java.sql.Timestamp.class.equals(obj.getClass())){tmp=java.sql.Timestamp.valueOf(obj.toString());}else{tmp=getLocalTimestamp(newjava.sql.Timestamp(obj.getTime()));}returntmp;}} 我們能夠這樣使用:TimeZone.setDefault(TimeZone.getTimeZone("GMT+8:00"));使用三種方法產(chǎn)生的日時(shí)對象java.util.Dateobj1=java.sql.Date.valueOf("1970-01-01");java.util.Dateobj2=newjava.util.Date(0L);java.util.Dateobj3=newjava.sql.Date(0L);經(jīng)過同樣的方式變換obj1=DateTimeUtils.getLocalDate(obj1);obj2=DateTimeUtils.getLocalDate(obj2);obj3=DateTi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論