Java語言的Calendar和Date類

「轉載」Java語言的Calendar和Date類java

Java 語言的Calendar(日曆),Date(日期),和DateFormat(日期格式)組成了Java標準的一個基本可是很是重要的部分。日期是商業邏輯計算一個關鍵的部分。全部的開發者都應該可以計算將來的日期,定製日期的顯示格式,並將文本數據解析成日期對象。函數

建立一個日期對象orm

讓咱們看一個使用系統的當前日期和時間建立一個日期對象並返回一個長整數。這個時間一般被稱爲Java 虛擬機(JVM)主機環境的系統時間。對象

  import java.util.Date;
  public class DateExample1 {
  public static void main(String[] args) {
// Get the system date/time
Date date = new Date();
System.out.println(date.getTime());
}   }開發

在星期六,2001年9月29日,下午大約是6:50的樣子,上面的例子在系統輸出設備上顯示的結果是 1001803809710。值得注意的是咱們使用了Date 構造函數建立一個日期對象,這個構造函數沒有接受任何參數,而這個構造函數在內部使用了System.currentTimeMillis() 方法來從系統獲取日期。如今咱們已經知道了如何獲取從1970年1月1日開始經歷的毫秒數了。咱們如何才能以一種用戶明白的格式來顯示這個日期呢? 在這裏類java.text.SimpleDateFormat 和它的抽象基類 java.text.DateFormat 就派得上用場了。字符串

日期數據的定製格式get

假如咱們但願定製日期數據的格式,比方星期六-9月-29日-2001年. 下面的例子展現瞭如何完成這個工做:虛擬機

  import java.text.SimpleDateFormat;
  import java.util.Date;
  public class DateExample2 {
  public static void main(String[] args) {
SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
Date date = new Date();
System.out.println(bartDateFormat.format(date));
}   }string

只要經過向SimpleDateFormat 的構造函數傳遞格式字符串"EEE-MMMM-dd-yyyy",咱們就可以指明本身想要的格式。格式字符串中的ASCII 字符告訴格式化函數下面顯示日期數據的哪個部分。EEEE是星期,MMMM是月,dd是日,yyyy是年。字符的個數決定了日期是如何格式化的。傳遞"EE-MM-dd-yy"會顯示 Sat-09-29-01。io

將文本數據解析成日期對象

假設咱們有一個文本字符串包含了一個格式化了的日期對象,咱們但願解析這個字符串並從文本日期數據建立一個日期對象。咱們將再次以格式化字符串"MM-dd-yyyy" 調用SimpleDateFormat類。可是這一次,咱們使用格式化解析而不是生成一個文本日期數據。咱們的例子,顯示在下面,將解析文本字符串"9-29-2001"並建立一個值爲001736000000 的日期對象。

  import java.text.SimpleDateFormat;
  import java.util.Date;
  public class DateExample3 {
  public static void main(String[] args) {
// Create a date formatter that can parse dates of
// the form MM-dd-yyyy.
SimpleDateFormat bartDateFormat = new SimpleDateFormat("MM-dd-yyyy");
// Create a string containing a text date to be parsed.
String dateStringToParse = "9-29-2001";
try {
// Parse the text version of the date.
// We have to perform the parse method in a
// try-catch construct in case dateStringToParse
// does not contain a date in the format we are expecting.
Date date = bartDateFormat.parse(dateStringToParse);
// Now send the parsed date as a long value
// to the system output.
System.out.println(date.getTime());
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
}   }

使用標準的日期格式化過程

既然咱們已經能夠生成和解析定製的日期格式了,讓咱們來看一看如何使用內建的格式化過程。方法 DateFormat.getDateTimeInstance() 讓咱們得以用幾種不一樣的方法得到標準的日期格式化過程。下面是咱們獲取了四個內建的日期格式化過程。它們包括一個短的,中等的,長的,和完整的日期格式。

  import java.text.DateFormat;
  import java.util.Date;
  public class DateExample4 {
  public static void main(String[] args) {

Date date = new Date();
DateFormat shortDateFormat = DateFormat.getDateTimeInstance(
DateFormat.SHORT, DateFormat.SHORT);
DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(
DateFormat.MEDIUM, DateFormat.MEDIUM);

DateFormat longDateFormat = DateFormat.getDateTimeInstance(
DateFormat.LONG, DateFormat.LONG);

DateFormat fullDateFormat = DateFormat.getDateTimeInstance(
DateFormat.FULL, DateFormat.FULL);
System.out.println(shortDateFormat.format(date));
System.out.println(mediumDateFormat.format(date));
System.out.println(longDateFormat.format(date));
System.out.println(fullDateFormat.format(date));
}
  }

注意咱們在對 getDateTimeInstance的每次調用中都傳遞了兩個值:第一個參數是日期風格,而第二個參數是時間風格。它們都是基本數據類型int(整型)。考慮到可讀性,咱們使用了DateFormat 類提供的常量: SHORT,MEDIUM,LONG,和 FULL。

運行咱們的例子程序的時候,它將向標準輸出設備輸出下面的內容:
  9/29/01 8:44 PM
  Sep 29,2001 8:44:45 PM
  September 29,2001 8:44:45 PM EDT
  Saturday,September 29,2001 8:44:45 PM EDT

Calendar 類

咱們如今已經可以格式化並建立一個日期對象了,可是咱們如何才能設置和獲取日期數據的特定部分呢,好比說小時,日,或者分鐘? 咱們又如何在日期的這些部分加上或者減去值呢? 答案是使用Calendar 類。

假設你想要設置,獲取,和操縱一個日期對象的各個部分,比方一個月的一天或者是一個星期的一天,爲了演示這個過程,咱們將使用具體的子類 java.util.GregorianCalendar。 考慮下面的例子,它計算獲得下面的第十個星期五是13號。
  import java.util.GregorianCalendar;
  import java.util.Date;
  import java.text.DateFormat;
  public class DateExample5 {
  public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);

// Create our Gregorian Calendar.
GregorianCalendar cal = new GregorianCalendar();
// Set the date and time of our calendar
// to the system´s date and time
cal.setTime(new Date());
System.out.println("System Date: " + dateFormat.format(cal.getTime()));
// Set the day of week to FRIDAY
cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);
System.out.println("After Setting Day of Week to Friday: " +dateFormat.format(cal.getTime()));
int friday13Counter = 0;
while (friday13Counter <= 10) {

// Go to the next Friday by adding 7 days.
cal.add(GregorianCalendar.DAY_OF_MONTH,7);
// If the day of month is 13 we have
// another Friday the 13th.
if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13) { friday13Counter++;
System.out.println(dateFormat.format(cal.getTime()));
  }
  }
  }
  }

在這個例子中咱們做了有趣的函數調用:

  cal.set(GregorianCalendar.DAY_OF_WEEK,
  GregorianCalendar.FRIDAY);
  和:cal.add(GregorianCalendar.DAY_OF_MONTH,7);

set 方法可以讓咱們經過簡單的設置星期中的哪一天這個域來將咱們的時間調整爲星期五。注意到這裏咱們使用了常量 DAY_OF_WEEK 和 FRIDAY來加強代碼的可讀性。add 方法讓咱們可以在日期上加上數值,潤年的全部複雜的計算都由這個方法自動處理。

咱們這個例子的輸出結果是:
  System Date: Saturday,September 29,2001

當咱們將它設置成星期五之後就成了:

  Friday,September 28,2001
  Friday,September 13,2002
  Friday,December 13,2002
  Friday,June 13,2003
  Friday,February 13,2004
  Friday,August 13,2004
  Friday,May 13,2005
  Friday,January 13,2006
  Friday,October 13,2006
  Friday,April 13,2007
  Friday,July 13,2007
  Friday,June 13,2008
  時間掌握在你的手裏

有了這些Date 和Calendar 類的例子,你應該可以使用 java.util.Date,java.text.SimpleDateFormat,和 java.util.GregorianCalendar 建立許多方法了。

相關文章
相關標籤/搜索