Java學習關於時間操作的應用類--Date類、Calendar類及其子類

忘塵天外天發表於2017-07-23

Date類

  Date類封裝了當期時間和日期。與Java1.0定義的原始版的Date類相比,Date類發生了本質的變化。在Java1.1釋出時,原始版Date類定義的許多功能被移進Calendar類和DateFormat類中。原始版Date類中的許多方法已經不贊成使用。

  Date類支援的建構函式:

  Date()

  Date(long   millisec)

  第一個建構函式使用當前日期和時間初始化物件。第二個建構函式接收一個引數,該引數等於自1970年1月1日午夜以來經歷的毫秒數。

Date物件建立以後,可以呼叫下面的方法。

序號方法和描述
1 boolean after(Date date)
若當呼叫此方法的Date物件在指定日期之後返回true,否則返回false。
2 boolean before(Date date)
若當呼叫此方法的Date物件在指定日期之前返回true,否則返回false。
3 Object clone( )
返回此物件的副本。
4 int compareTo(Date date)
比較當呼叫此方法的Date物件和指定日期。兩者相等時候返回0。呼叫物件在指定日期之前則返回負數。呼叫物件在指定日期之後則返回正數。
5 int compareTo(Object obj)
若obj是Date型別則操作等同於compareTo(Date) 。否則它丟擲ClassCastException。
6 boolean equals(Object date)
當呼叫此方法的Date物件和指定日期相等時候返回true,否則返回false。
7 long getTime( )
返回自 1970 年 1 月 1 日 00:00:00 GMT 以來此 Date 物件表示的毫秒數。
8 int hashCode( )
 返回此物件的雜湊碼值。
9 void setTime(long time)
 
用自1970年1月1日00:00:00 GMT以後time毫秒數設定時間和日期。
10 String toString( )
轉換Date物件為String表示形式,並返回該字串。

日期比較

Java使用以下三種方法來比較兩個日期:

  • 使用 getTime() 方法獲取兩個日期(自1970年1月1日經歷的毫秒數值),然後比較這兩個值。
  • 使用方法 before(),after() 和 equals()。例如,一個月的12號比18號早,則 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
  • 使用 compareTo() 方法,它是由 Comparable 介面定義的,Date 類實現了這個介面。

使用 SimpleDateFormat 格式化日期

SimpleDateFormat 是一個以語言環境敏感的方式來格式化和分析日期的類。SimpleDateFormat 允許你選擇任何使用者自定義日期時間格式來執行。

    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;

    public class Calendartest {
    public static void main(String[] args) {

    SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date d = new Date();
    System.out.println(ft.format(d));

     }

日期和時間的格式化編碼

時間模式字串用來指定時間格式。在此模式中,所有的 ASCII 字母被保留為模式字母,定義如下:

字母描述示例
G 紀元標記 AD
y 四位年份 2001
M 月份 July or 07
d 一個月的日期 10
h  A.M./P.M. (1~12)格式小時 12
H 一天中的小時 (0~23) 22
m 分鐘數 30
s 秒數 55
S 毫秒數 234
E 星期幾 Tuesday
D 一年中的日子 360
F 一個月中第幾周的周幾 2 (second Wed. in July)
w 一年中第幾周 40
W 一個月中第幾周 1
a A.M./P.M. 標記 PM
k 一天中的小時(1~24) 24
K  A.M./P.M. (0~11)格式小時 10
z 時區 Eastern Standard Time
' 文字定界符 Delimiter
" 單引號

Calendar類

  Calendar抽象類提供一套方法,允許將毫秒數形式的時間轉化成大量有用的時間組成部分。例如年、月、日、小時、分和秒。Calendar類沒有提供公有的建構函式,Calendar類的功能要比Date類強大很多,而且在實現方式上也比Date類要複雜一些。Calendar類是一個抽象類,在實際使用時實現特定的子類的物件,建立物件的過程對程式設計師來說是透明的,只需要使用getInstance方法建立即可。

建立一個代表系統當前日期的Calendar物件

Calendar c = Calendar.getInstance();//預設是當前日期

建立一個指定日期的Calendar物件

使用Calendar類代表特定的時間,需要首先建立一個Calendar的物件,然後再設定該物件中的年月日引數來完成。

//建立一個代表2009年6月12日的Calendar物件
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);

Calendar類物件欄位型別

Calendar類中用一下這些常量表示不同的意義,jdk內的很多類其實都是採用的這種思想

常量描述
Calendar.YEAR 年份
Calendar.MONTH 月份
Calendar.DATE 日期
Calendar.DAY_OF_MONTH 日期,和上面的欄位意義完全相同
Calendar.HOUR 12小時制的小時
Calendar.HOUR_OF_DAY 24小時制的小時
Calendar.MINUTE 分鐘
Calendar.SECOND
Calendar.DAY_OF_WEEK 星期幾

 

Calendar類物件資訊的獲得

Calendar c1 = Calendar.getInstance();
// 獲得年份
int year = c1.get(Calendar.YEAR);
// 獲得月份
int month = c1.get(Calendar.MONTH) + 1;
// 獲得日期
int date = c1.get(Calendar.DATE);
// 獲得小時
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 獲得分鐘
int minute = c1.get(Calendar.MINUTE);
// 獲得秒
int second = c1.get(Calendar.SECOND);
// 獲得星期幾(注意(這個與Date類是不同的):1代表星期日、2代表星期1、3代表星期二,以此類推)
int day = c1.get(Calendar.DAY_OF_WEEK);
 

相關文章