JAVA中Date類的使用

一、 Date類

 Date類對象的創建:

1、創建一個當前時間的Date對象

//創建一個代表系統當前日期的Date對象

  Date d = new Date();

2、創建一個我們指定的時間的Date對象:

使用帶參數的構造方法Date(int year, int month, int day) ,可以構造指定日期的Date類對象,Date類中年份的參數應該是實際需要代表的年份減去1900,實際需要代表的月份減去1以後的值。

//創建一個代表2014年6月12號的Date對象

Date d1 = new Date(2014-1900, 6-1, 12); (注意參數的設置)

3、正確獲得一個date對象所包含的信息

如:

    Date d2 =  new Date(2014-1900, 6-1, 12);

        //獲得年份 (注意年份要加上1900,這樣纔是日期對象d2所代表的年份)

        int year = d2.getYear() + 1900;

        //獲得月份  (注意月份要加1,這樣纔是日期對象d2所代表的月份)

        int month = d2.getMonth() + 1;

        //獲得日期

        int date = d2.getDate();

        //獲得小時

        int hour = d2.getHours();//不設置默認爲0

        //獲得分鐘

        int minute = d2.getMinutes();

        //獲得秒

        int second = d2.getSeconds();

   //獲得星期 (注意:0代表星期日、1代表星期1、2代表星期2,其他的一次類推了)

int day = d2.getDay();

二、Calendar類

    Calendar類的功能要比Date類強大很多,可以方便的進行日期的計算,獲取日期中的信息時考慮了時區等問題。而且在實現方式上也比Date類要複雜一些

1、Calendar類對象的創建

   Calendar類是一個抽象類,由於Calendar類是抽象類,且Calendar類的構造方法是protected的,所以無法使用Calendar類的構造方法來創建對象,API中提供了getInstance方法用來創建對象。

2、創建一個代表系統當前日期的Calendar對象

 Calendar c = Calendar.getInstance();//默認是當前日期

3、創建一個指定日期的Calendar對象

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

//創建一個代表2014年5月9日的Calendar對象

Calendar c1 = Calendar.getInstance();

c1.set(2014, 5 - 1, 9);//調用:public final void set(int year,int month,int date)

4、Calendar類對象信息的設置與獲得

 1)Calendar類對象信息的設置

 A、Set設置

       如:Calendar c1 = Calendar.getInstance();

       調用:public final void set(int year,int month,int date)

   c1.set(2014, 6- 1, 9);//把Calendar對象c1的年月日分別設這爲:2014、6、9

  B、利用字段類型設置

  如果只設定某個字段,例如日期的值,則可以使用public void set(int field,int value)

 //把 c1對象代表的日期設置爲10號,其它所有的數值會被重新計算

     c1.set(Calendar.DATE,10);

 //把c1對象代表的年份設置爲2014年,其他的所有數值會被重新計算

     c1.set(Calendar.YEAR,2015);

 其他字段屬性set的意義以此類推

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——星期幾

 C、Add設置(可用與計算時間)

  Calendar c1 = Calendar.getInstance();

 //把c1對象的日期加上10,也就是c1所表的日期的10天后的日期,其它所有的數值會被重新計算

  c1.add(Calendar.DATE, 10);

 //把c1對象的日期加上-10,也就是c1所表的日期的10天前的日期,其它所有的數值會被重新計算

 c1.add(Calendar.DATE, -10);

 其他字段屬性的add的意義以此類推

2)、Calendar類對象信息的獲得(使用get())

 Calendar c1 = Calendar.getInstance();

// 獲得年份

int year = c1.get(Calendar.YEAR);

// 獲得月份

int month = c1.get(Calendar.MONTH) + 1;(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);

三、 GregorianCalendar類

GregorianCalendar 是 Calendar 的一個具體子類,提供了世界上大多數國家使用的標準日曆系統。

1、GregorianCalendar類對象的創建

GregorianCalendar有自己的構造方法,而其父類Calendar沒有公開的構造方法。

GregorianCalendar() 在具有默認語言環境的默認時區內使用當前時間構造一個默認的 GregorianCalendar。

 

在具有默認語言環境的默認時區內構造一個帶有給定日期設置的 GregorianCalendar。

GregorianCalendar(int year, int month, int dayOfMonth) 

GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) 。

GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)

 

2、創建一個代表當前日期的GregorianCalendar對象

 GregorianCalendar gc = new GregorianCalendar();

//創建一個代表2014年6月19日的GregorianCalendar對象(注意參數設置,與其父類是一樣,月份要減去1)

GregorianCalendar gc = new GregorianCalendar(2014,6-1,19);

3、另外:GregorianCalendar有一個方法:boolean isLeapYear(int year) 確定給定的年份是否爲閏年

 

四、DateFormat類和SimpleDateFormat類

  public class SimpleDateFormat extends DateFormat 是一個以與語言環境相關的方式來格式化和分析日期的具體類。(日期時間輸出的工具類)

它允許進行日期格式化(日期 -> 文本)、分析(文本 -> 日期)和規範化。所以SimpleDateFormat類可以實現:String 到 Date,Date到String的互轉

 

五、日期類對象之間的互轉

 

/* Date Long Calendar*/

 Date類對象與long型時間的互轉

//1.將Date類的對象轉換爲long型時間

Date d= new Date();

//使用對象的getTime()方法完成

long dLong = d.getTime();

//2.將long型時間轉換爲Date類的對象

long time = 1290876532190L;

//使用Date的構造方法完成

Date d2 = new Date(time);

 

Calendar對象和long型時間之間的互轉

// 將Calendar對象轉換爲相對時間

Calendar c = Calendar.getInstance();

long t1 = c.getTimeInMillis(); 

// 將long轉換爲Calendar對象

Calendar c1 = Calendar.getInstance();

long t = 1252785271098L;

c1.setTimeInMillis(t1);

 

/* String Date Calendar 三者之間的相互轉換*/

 

 

Calendar對象和Date對象之間的互轉

//1 .將Calendar對象轉換爲Date(c.getTime())

Calendar c = Calendar.getInstance();

Date d = c.getTime();

// 2.將Date轉換爲Calendar對象(s.setTime(date))

Calendar c1 = Calendar.getInstance();

Date d1 = new Date();

//通過setTime()方法後,日曆c1所表示的日期就d1的日期

c1.setTime(d1);

 

String  Calendar之間的轉換

//1.Date 轉化String

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");

String dateStr=sdf.format(new Date());

//2.String 轉化Date

String str="2010-5-27";

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");

Date birthday = sdf.parse(str);

 

Date個Calendar對象之間的轉換

//1.Date 轉化爲Calendar

Calendar calendar = Calendar.getInstance();

calendar.setTime(new Date());

//2.Calenda轉換爲Date

 Calendar calendar = Calendar.getInstance();

 Date date =calendar.getTime();

 

Date和String對象之間的轉換

//1.Calendar 轉化 String

  Calendar calendat = Calendar.getInstance();

  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")0;

  String dateStr = sdf.format(calendar.getTime());

//2.String 轉化Calendar

String str="2010-5-27";

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");

Date date =sdf.parse(str);

Calendar calendar = Calendar.getInstance();

calendar.setTime(date);

 

六、利用以上各個類的功能,我們可以很簡單的實現一些時間計算的功能,下面看幾個方法:

  l、判斷是否是閏年

    /**

     * 給定一個年份判斷該年份是否爲閏年

     */

    public static boolean isLeapYear(int year) {

       GregorianCalendar calendar = new GregorianCalendar();

       return calendar.isLeapYear(year);

    }

 

  2、獲取當前日期的字符串表示形式

    /**

     * 利用SimpleDateFormat獲取當前日期的字符串表示形式 格式:2009-5-05

     */

    public static String getCurrentDate() {

       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

       return dateFormat.format(System.currentTimeMillis());

    }

 

  3、給出任意一個年月日得到該天是星期幾

    /**

     * 給出任意一個年月日得到該天是星期幾

     */

    public static int getWeek(String date) {

       // 注意參數的大小寫格式

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

       Calendar c = Calendar.getInstance();

       try {

           Date d = dateFormat.parse(date);

           c.setTime(d);

       } catch (ParseException e) {

       }

       return c.get(Calendar.DAY_OF_WEEK)-1;

    }

 

  4、 獲得今天n天以後或者n天以前是那一天

    /**

     * 獲得距離今天n天的那一天的日期

     */

    public static String getDistanceDay(int day) {

       Calendar calen = Calendar.getInstance();

       calen.add(Calendar.DAY_OF_MONTH, day);

       Date date = calen.getTime();

       // 這裏也個用SimpleDateFormat的format()進行格式化,然後以字符串形式返回格式化後的date

       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

       return dateFormat.format(date);

}

 

  5、 獲得距離指定日期n天的那一天的日期

    /**

     * 獲得距離指定日期n天的那一天的日期

     */

    public static String getDistanceDay(String date, int day) {

       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

       Date d;

       Calendar c =Calendar.getInstance();

       try {

           d = dateFormat.parse(date);

           c.setTime(d);

           c.add(Calendar.DATE, day);

 

       } catch (ParseException e) {

           e.printStackTrace();

       }

       return dateFormat.format(c.getTime());

    }

 

  6、獲得給定兩個日期相差的天數

    /**

     * 獲得給定兩個日期相差的天數

     *

     */

    public static long getGapDays(String date1, String date2) {

       String[] d1 = date1.split("-");

       String[] d2 = date2.split("-");

       Calendar c = Calendar.getInstance();

       c.set(Integer.parseInt(d1[0]), Integer.parseInt(d1[1]), Integer

              .parseInt(d1[2]), 0, 0, 0);

       long l1 = c.getTimeInMillis();

       c.set(Integer.parseInt(d2[0]), Integer.parseInt(d2[1]), Integer

              .parseInt(d2[2]), 0, 0, 0);

       long l2 = c.getTimeInMillis();

       return (Math.abs(l1 - l2) / (24 * 60 * 60 * 1000));

    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章