Java Date 和 Calendar
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
Java 語言的Date(日期),Calendar(日曆),DateFormat(日期格式)組成了Java標準的一個基本但是非常重要的部分。日期是商業邏輯計算一個關鍵的部分,所有的開發者都應該能夠計算未來的日期,定製日期的顯示格式,並將文字資料解析成日期物件。
建立一個日期物件
讓我們看一個使用系統的當前日期和時間建立一個日期物件並返回一個長整數,這個時間通常被稱為Java 虛擬機器(JVM)主機環境的系統時間。
import java.util.Date;public class DateTest { public static void main(String[] args) { Date date = new Date(); System.out.println(date); // Fri Mar 02 22:38:41 CST 2012 System.out.println(date.getTime()); // 1330699121772 }}
在星期五,2012年3月2日,下午大約是22:38:41的樣子,上面的例子在系統輸出裝置上顯示的結果是 1330699121772。值得注意的是我們使用了Date 建構函式建立一個日期物件,這個建構函式沒有接受任何引數,而這個建構函式在內部使用了System.currentTimeMillis() 方法來從系統獲取日期。現在我們已經知道了如何獲取從1970年1月1日開始經歷的毫秒數了。我們如何才能以一種使用者明白的格式來顯示這個日期呢? 在這裡類java.text.SimpleDateFormat 和它的抽象基類 java.text.DateFormat 就派得上用場了。
日期資料的定製格式
假如我們希望定製日期資料的格式,比方星期五-3月-02日-2012年. 下面的例子展示瞭如何完成這個工作:
import java.text.SimpleDateFormat;import java.util.Date;public class DateTest { public static void main(String[] args) { Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy"); System.out.println(dateFormat.format(date)); // Friday-March-02-2012 }}
只要通過向SimpleDateFormat 的建構函式傳遞格式字串"EEE-MMMM-dd-yyyy",我們就能夠指明自己想要的格式。格式字串中的ASCII 字元告訴格式化函式下面顯示日期資料的哪一個部分。EEEE是星期,MMMM是月,dd是日,yyyy是年,字元的個數決定了日期是如何格式化的。傳遞"EE-MM-dd-yy"會顯示 Friday-March-02-2012。
將文字資料解析成日期物件
假設我們有一個文字字串包含了一個格式化了的日期物件,我們希望解析這個字串並從文字日期資料建立一個日期物件。我們將再次以格式化字串"MM-dd-yyyy" 呼叫SimpleDateFormat類。但是這一次,我們使用格式化解析而不是生成一個文字日期資料。我們的例子顯示在下面,將解析文字字串"3-02-2012"並建立一個值為1330617600000 的日期物件。
import java.text.SimpleDateFormat;import java.util.Date;public class DateTest { public static void main(String[] args) { SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy"); String txtDate = "3-02-2012"; try { Date date = dateFormat.parse(txtDate); System.out.println(date.getTime()); // 1330617600000 System.out.println(dateFormat.format(date)); // 03-02-2012 } catch (Exception e) { System.out.println(e.getMessage()); } }}
使用標準的日期格式化過程
既然我們已經可以生成和解析定製的日期格式了,讓我們來看一看如何使用內建的格式化過程。方法 DateFormat.getDateTimeInstance() 讓我們得以用幾種不同的方法獲得標準的日期格式化過程。下面是我們獲取了六個內建的日期格式化過程。它們包括一個空,預設,短的,中等的,長的,完整的日期格式。
import java.text.DateFormat;import java.util.Date;public class DateTest { public static void main(String[] args) { String strDate = null; Date date = new Date(); System.out.println(date); // Fri Mar 02 21:43:55 CST 2012 strDate = DateFormat.getDateInstance().format(date); System.out.println(strDate); // Mar 2, 2012 // Date strDate = DateFormat.getDateInstance(DateFormat.DEFAULT).format(date); System.out.println(strDate); // Mar 2, 2012 strDate = DateFormat.getDateInstance(DateFormat.SHORT).format(date); System.out.println(strDate); // 3/2/12 strDate = DateFormat.getDateInstance(DateFormat.MEDIUM).format(date); System.out.println(strDate); // Mar 2, 2012 strDate = DateFormat.getDateInstance(DateFormat.LONG).format(date); System.out.println(strDate); // March 2, 2012 strDate = DateFormat.getDateInstance(DateFormat.FULL).format(date); System.out.println(strDate); // Friday, March 2, 2012 // DateTime strDate = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT).format(date); System.out.println(strDate); // Mar 2, 2012 11:06:36 PM strDate = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date); System.out.println(strDate); // 3/2/12 11:06 PM strDate = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM).format(date); System.out.println(strDate); // Mar 2, 2012 11:06:36 PM strDate = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG).format(date); System.out.println(strDate); // March 2, 2012 11:06:36 PM CST strDate = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL).format(date); System.out.println(strDate); // Friday, March 2, 2012 11:06:36 PM CST }}
執行結果:
Fri Mar 02 23:06:36 CST 2012
Mar 2, 2012
Mar 2, 2012 11:06:36 PM
3/2/12 11:06 PM
Mar 2, 2012 11:06:36 PM
March 2, 2012 11:06:36 PM CST
Friday, March 2, 2012 11:06:36 PM CST
Mar 2, 2012
3/2/12
Mar 2, 2012
March 2, 2012
Friday, March 2, 2012
注意我們在對 getDateTimeInstance的每次呼叫中都傳遞了兩個值:第一個引數是日期風格,而第二個引數是時間風格。它們都是基本資料型別int(整型)。考慮到可讀性,我們使用了DateFormat 類提供的常量: DEFAULT,SHORT,MEDIUM,LONG, FULL。
Calendar 類
我們現在已經能夠格式化並建立一個日期物件了,但是我們如何才能設定和獲取日期資料的特定部分呢,比如說小時,日,分鐘? 我們又如何在日期的這些部分加上或者減去值呢? 答案是使用Calendar 類。
假設你想要設定,獲取,操縱一個日期物件的各個部分,比方一個月的一天或者是一個星期的一天,為了演示這個過程,我們將使用具體的子類 java.util.GregorianCalendar。 考慮下面的例子,它計算得到下面的第十個星期五是13號。
import java.text.DateFormat;import java.util.Date;import java.util.GregorianCalendar;public class CalendarTest { public static void main(String[] args) { Date date = new Date(); DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL); GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(date); System.out.println("System Date: " + calendar.getTime()); calendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY); System.out.println("Day of Week to Friday: \n" + dateFormat.format(calendar.getTime())); int friday13Counter = 0; while(friday13Counter <= 10) { calendar.add(GregorianCalendar.DAY_OF_MONTH, 7); if(calendar.get(GregorianCalendar.DAY_OF_MONTH) == 13) { friday13Counter++; System.out.println(dateFormat.format(calendar.getTime())); } } }}
執行結果:
System Date: Fri Mar 02 23:37:01 CST 2012
Day of Week to Friday:
Friday, March 2, 2012
Friday, April 13, 2012
Friday, July 13, 2012
Friday, September 13, 2013
Friday, December 13, 2013
Friday, June 13, 2014
Friday, February 13, 2015
Friday, March 13, 2015
Friday, November 13, 2015
Friday, May 13, 2016
Friday, January 13, 2017
Friday, October 13, 2017
在這個例子中我們作了有趣的函式呼叫:
calendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY) 和 calendar.add(GregorianCalendar.DAY_OF_MONTH, 7)
set 方法能夠讓我們通過簡單的設定星期中的哪一天這個域來將我們的時間調整為星期五。注意到這裡我們使用了常量 DAY_OF_WEEK 和 FRIDAY來增強程式碼的可讀性。
add 方法讓我們能夠在日期上加上數值,潤年的所有複雜的計算都由這個方法自動處理。
我們這個例子的輸出結果是:
System Date: Fri Mar 02 23:33:19 CST 2012
當我們將它設定成星期五以後就成了:
Day of Week to Friday:
Friday, March 2, 2012
Friday, April 13, 2012
Friday, July 13, 2012
Friday, September 13, 2013
Friday, December 13, 2013
Friday, June 13, 2014
Friday, February 13, 2015
Friday, March 13, 2015
Friday, November 13, 2015
Friday, May 13, 2016
Friday, January 13, 2017
Friday, October 13, 2017
時間掌握在你的手裡
有了這些Date 和Calendar 類的例子,你應該能夠使用 java.util.Date,java.text.SimpleDateFormat, java.util.GregorianCalendar 建立許多方法了。
參考推薦:
“Java語言的Calendar和Date類” 的更多相關文章