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


一、Date類(該類如今不多用了)java

lDate類對象的建立:ide

n建立一個當前時間函數

//默認是建立一個表明系統當前日期的Date對象spa

Date d = new Date();code

n建立一個咱們指定的時間的Date對象:orm

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

//建立一個表明2009612號的Date對象ci

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

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

如:

   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,又是一個星期天哦

二、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);

三、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)
肯定給定的年份是否爲閏年

四、DateFormat

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

五、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()));

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

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

七、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));

   }

相關文章
相關標籤/搜索