java日期處理類總結:Date/Calendar/GregorianCalendar/DateFormat/SimpleDateFormat類


1、Date類(該類現在很少用了)

lDate類對象的創建:

n創建一個當前時間

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

Date d = new Date();

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

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

//創建一個代表2009612號的Date對象

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

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

如:

   Date d2 =  new Date(2009-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();

//獲得分鐘

int minute = d2.getMinutes();

//獲得秒

int second = d2.getSeconds();

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

int day = d2.getDay();

運行結果:

年份:2009

月份:6

日期:12

小時:0  //不設置默認是0

分鐘:0  //不設置默認是0

秒:0    //不設置默認是0

星期:5  //09-6-12今天就是星期5,又是一個星期天哦

2、Calendar

Calendar類的功能要比Date類強大很多,而且在實現方式上也比Date類要複雜一些

lCalendar類對象的創建

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

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

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

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

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

//創建一個代表2009612Calendar對象

Calendar c1 = Calendar.getInstance();

c1.set(2009, 6 - 1, 12);

lCalendar類對象字段類型

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

lCalendar類對象信息的設置與獲得

nCalendar類對象信息的設置

uSet設置

Calendar c1 = Calendar.getInstance();

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

c1.set(2009, 6 - 1, 12);//Calendar對象c1的年月日分別設這爲:2009612

利用字段類型設置

如果只設定某個字段,例如日期的值,則可以使用如下set方法:

調用:public void set(int field,int value)

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

c1.set(Calendar.DATE,10);

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

c1.set(Calendar.YEAR,2008);

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

uAdd設置

Calendar c1 = Calendar.getInstance();

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

c1.add(Calendar.DATE, 10);

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

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

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

nCalendar類對象信息的獲得

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代表星期13代表星期二,以此類推)

int day = c1.get(Calendar.DAY_OF_WEEK);

3、GregorianCalendar

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

GregorianCalendar類對象的創建

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

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

GregorianCalendar(int year, int month, int dayOfMonth)
在具有默認語言環境的默認時區內構造一個帶有給定日期設置的 GregorianCalendar。

GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute)
爲具有默認語言環境的默認時區構造一個具有給定日期和時間設置的 GregorianCalendar。

GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)
爲具有默認語言環境的默認時區構造一個具有給定日期和時間設置的 GregorianCalendar。

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

GregorianCalendar gc = new GregorianCalendar();

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

GregorianCalendar gc = new GregorianCalendar(2009,6-1,12);

字段屬性什麼的都是隨其父Calendar了,呵

另外:GregorianCalendar有下面一個方法:

isLeapYear(int year)
確定給定的年份是否爲閏年

4、DateFormat

DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並分析日期或時間。日期/時間格式化子類(如 SimpleDateFormat)允許進行格式化(也就是日期 -> 文本)、分析(文本-> 日期)和標準化。將日期表示爲 Date對象,或者表示爲從 GMT(格林尼治標準時間)1970 年,1 月1 日 00:00:00 這一刻開始的毫秒數。

5、SimpleDateFormat

public class SimpleDateFormat extends DateFormat

SimpleDateFormat是一個以與語言環境相關的方式來格式化和分析日期的具體類。它允許進行格式化(日期 -> 文本)、分析(文本 -> 日期)和規範化。

所以本類可以實現:String 到 Date   Date到String的互轉,如下:

SimpleDateFormat對象最常用的就是一下兩招了:

//注意構造函數中是SimpleDateFormat類解析日期的模式,大小寫代表的意義完全不一樣哦

      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

//日期到字符串的轉換

          String today = df.format(new Date());

//字符串到日期的轉換

          Date date = df.parse("2009-06-12 02:06:37");

          System.out.println(df.format(new Date()));

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

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

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

Date d= new Date();

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

longdLong = d.getTime();

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

long time = 1290876532190L;

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

Date d2 = new Date(time);

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

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

Calendar c = Calendar.getInstance();

long t1 = c.getTimeInMillis();

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

Calendar c1 = Calendar.getInstance();

longt = 1252785271098L;

c1.setTimeInMillis(t1);

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

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

Calendar c = Calendar.getInstance();

Date d = c.getTime();

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

Calendar c1 = Calendar.getInstance();

Date d1 = new Date();

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

c1.setTime(d1);

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

l判斷是否是閏年

/**

*給定一個年份判斷該年份是否爲閏年createdate:2009-6-10author:Administrator

*

*@paramyear

*@return

*/

publicstaticboolean isLeapYear(int year) {

      GregorianCalendar calendar = new GregorianCalendar();

return calendar.isLeapYear(year);

   }

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

/**

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

*

*createdate:2009-6-5author:Administrator

*

*@return

*/

publicstatic String getCurrentDate() {

// 注意 SimpleDateFormat("yyyy-MM-dd")的參數間隔符號可以隨意設置的,如:

// yyyyMMdd返回格式:20090609

// yyyy-MM-dd 返回格式: 2009-06-09

// SimpleDateFormat dateFormat = new SimpleDateFormat(

// "yyyy-MM-dd HH:mm:ss");

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

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

   }

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

/**

*給出任意一個年月日得到該天是星期幾createdate:2009-6-10author:Administrator

*

*@paramdate

*參數格式2009-6-10

*返回值:0代表星期日,1代表星期12代表星期2,以此類推

*/

publicstaticint getWeek(String date) {

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

      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

      Calendar c = Calendar.getInstance();

try {

          Date d = dateFormat.parse(date);

          c.setTime(d);

      } catch (ParseException e) {

      }

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

   }

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

/**

*獲得距離今天n天的那一天的日期createdate:2009-6-11author:Administrator

*

*@paramday

*@return

*/

publicstatic String getDistanceDay(int day) {

      Calendar calen = Calendar.getInstance();

      calen.add(Calendar.DAY_OF_MONTH, day);

      Date date = calen.getTime();

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

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

return dateFormat.format(date);

   }

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

/**

*獲得距離指定日期n天的那一天的日期createdate:2009-6-11author:Administrator

*

*@paramdate

*格式:2009-6-11

*@paramday

*@return

*/

publicstatic 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) {

// TODO Auto-generated catch block

          e.printStackTrace();

      }

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

   }

/**

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

*createdate:2009-6-23author:Administrator

*

*@paramdate1

*參數格式:2009-06-21

*@paramdate2

*/

publicstaticlong 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));

   }


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