Java日期和時間類簡介

qq_37723158發表於2018-02-03
Java 的日期和時間類位於 java.util 包中。利用日期時間類提供的方法,可以獲取當前的日期和時間,建立日期和時間引數,計算和比較時間。

Date 類

Date 類是 Java 中的日期時間類,其構造方法比較多,下面是常用的兩個:
  • Date():使用當前的日期和時間初始化一個物件。
  • Date(long millisec):從1970年01月01日00時(格林威治時間)開始以毫秒計算時間,計算 millisec 毫秒。如果執行 Java 程式的本地時區是北京時區(與格林威治時間相差 8 小時),Date dt1=new Date(1000);,那麼物件 dt1 就是1970年01月01日08時00分01秒。

請看一個顯示日期時間的例子:
  1. import java.util.Date;
  2. public class Demo{
  3. public static void main(String args[]){
  4. Date da=new Date(); //建立時間物件
  5. System.out.println(da); //顯示時間和日期
  6. long msec=da.getTime();
  7. System.out.println("從1970年1月1日0時到現在共有:" + msec + "毫秒");
  8. }
  9. }
執行結果:
Mon Feb 05 22:50:05 CST 2007
從1970年1月1日0時到現在共有:1170687005390 毫秒

一些比較常用的 Date 類方法:
方法 功能
boolean after(Date date) 若呼叫 Date 物件所包含的日期比 date 指定的物件所包含的日期晚,返回 true,否則返回 false。
boolean before(Date date) 若呼叫 Date 物件所包含的日期比 date 指定的物件所包含的日期早,返回 true,否則返回 false。
Object clone() 複製呼叫 Date 物件。
int compareTo(Date date) 比較呼叫物件所包含的日期和指定的物件包含的日期,若相等返回 0;若前者比後者早,返回負值;否則返回正值。
long getTime() 以毫秒數返回從 1970 年 01 月 01 日 00 時到目前的時間。
int hashCode() 返回撥用物件的雜湊值。
void setTime(long time) 根據 time 的值,設定時間和日期。time 值從 1970 年 01 月 01 日 00 時開始計算。
String toString() 把呼叫的 Date 物件轉換成字串並返回結果。
public Static String valueOf(type variable) 把 variable 轉換為字串。
Date 物件表示時間的預設順序是星期、月、日、小時、分、秒、年。若需要修改時間顯示的格式可以使用“SimpleDateFormat(String pattern)”方法。

例如,用不同的格式輸出時間:
  1. import java.util.Date;
  2. import java.text.SimpleDateFormat;
  3. public class Demo{
  4. public static void main(String args[]){
  5. Date da=new Date();
  6. System.out.println(da);
  7. SimpleDateFormat ma1=new SimpleDateFormat("yyyy 年 MM 月 dd 日 E 北京時間");
  8. System.out.println(ma1.format(da));
  9. SimpleDateFormat ma2=new SimpleDateFormat("北京時間:yyyy 年 MM 月 dd 日 HH 時 mm 分 ss 秒");
  10. System.out.println(ma2.format(-1000));
  11. }
  12. }
執行結果:
Sun Jan 04 17:31:36 CST 2015
2015 年 01 月 04 日 星期日 北京時間
北京時間:1970 年 01 月 01 日 07 時 59 分 59 秒

Calendar 類

抽象類 Calendar 提供了一組方法,允許把以毫秒為單位的時間轉換成一些有用的時間組成部分。Calendar 不能直接建立物件,但可以使用靜態方法 getInstance() 獲得代表當前日期的日曆物件,如:
    Calendar calendar=Calendar.getInstance();
該物件可以呼叫下面的方法將日曆翻到指定的一個時間:
  1. void set(int year,int month,int date);
  2. void set(int year,int month,int date,int hour,int minute);
  3. void set(int year,int month,int date,int hour,int minute,int second);
若要呼叫有關年份、月份、小時、星期等資訊,可以通過呼叫下面的方法實現:
    int get(int field);
其中,引數 field 的值由 Calendar 類的靜態常量決定。其中:YEAR 代表年,MONTH 代表月,HOUR 代表小時,MINUTE 代表分,如:
    calendar.get(Calendar.MONTH);
如果返回值為 0 代表當前日曆是一月份,如果返回 1 代表二月份,依此類推。

由 Calendar 定義的一些常用方法如下表所示:
方法 功能
abstract void add(int which,int val) 將 val 加到 which 所指定的時間或者日期中,如果需要實現減的功能,可以加一個負數。which 必須是 Calendar 類定義的欄位之一,如 Calendar.HOUR
boolean after(Object calendarObj) 如果呼叫 Calendar 物件所包含的日期比 calendarObj 指定的物件所包含的日期晚,返回 true,否則返回 false
boolean before(Object calendarObj) 如果呼叫 Calendar 物件所包含的日期比 calendarObj 指定的物件所包含的日期早,返回 true,否則返回 false
final void clear() 對呼叫物件包含的所有時間組成部分清零
final void clear(int which) 對呼叫物件包含的 which 所指定的時間組成部分清零
boolean equals(Object calendarObj) 如果呼叫 Calendar 物件所包含的日期和 calendarObj 指定的物件所包含的日期相等,返回 true,否則返回 false
int get(int calendarField) 返回撥用 Calendar 物件的一個時間組成部分的值,這個組成部分由 calendarField指定,可以被返回的組成部分如:Calendar.YEAR,Calendar.MONTH 等
static Calendar getInstance() 返回使用預設地域和時區的一個 Calendar 物件
final Date getTime() 返回一個和呼叫物件時間相等的 Date 物件
final boolean isSet(int which) 如果呼叫物件所包含的 which 指定的時間部分被設定了,返回 true,否則返回 false
final void set(int year,int month) 設定呼叫物件的各種日期和時間部分
final void setTime(Date d) 從 Date 物件 d 中獲得日期和時間部分
void setTimeZone(TimeZone t) 設定呼叫物件的時區為 t 指定的那個時區

GregorianCalendar 類

GregorianCalendar 是一個具體實現 Calendar 類的類,該類實現了公曆日曆。Calendar 類的 getInstance() 方法返回一個 GregorianCalendar,它被初始化為預設的地域和時區下的當前日期和時間。

GregorianCalendar 類定義了兩個欄位:AD 和 BC,分別代表公元前和公元后。其預設的構造方法 GregorianCalendar() 以預設的地域和時區的當前日期和時間初始化物件,另外也可以指定地域和時區來建立一個 GregorianCalendar 物件,例如:
  1. GregorianCalendar(Locale locale);
  2. GregorianCalendar(TimeZone timeZone);
  3. GregorianCalendar(TimeZone timeZone,Locale locale);
GregorianCalendar 類提供了 Calendar 類中所有的抽象方法的實現,同時還提供了一些附加的方法,其中用來判斷閏年的方法為:
    Boolean isLeapYear(int year);
如果 year 是閏年,該方法返回 true,否則返回 false。

相關文章