qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          java日期處理類總結(jié):

          Date/Calendar/GregorianCalendar/DateFormat/SimpleDateFormat類

           

           

          java中的日期處理類總結(jié):Date/Calendar/GregorianCalendar/DateFormat/SimpleDateFormat

          今天花了好大一點時間把java的日期類做了一下整理,哈

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

          l         Date類對象的創(chuàng)建:

           

          n         創(chuàng)建一個當(dāng)前時間

          //默認是創(chuàng)建一個代表系統(tǒng)當(dāng)前日期的Date對象

            Date d = new Date();

          n         創(chuàng)建一個我們指定的時間的Date對象:

          下面是使用帶參數(shù)的構(gòu)造方法,可以構(gòu)造指定日期的Date類對象,Date類中年份的參數(shù)應(yīng)該是實際需要代表的年份減去1900,實際需要代表的月份減去1以后的值。

          //創(chuàng)建一個代表2009612號的Date對象

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

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

          運行結(jié)果:

          年份:2009

          月份:6

          日期:12

          小時:0 //不設(shè)置默認是0

          分鐘:0 //不設(shè)置默認是0

          秒:0    //不設(shè)置默認是0

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

           

           

          2、         Calendar

          Calendar類的功能要比Date類強大很多,而且在實現(xiàn)方式上也比Date類要復(fù)雜一些

           

          l         Calendar類對象的創(chuàng)建

          Calendar類是一個抽象類,在實際使用時實現(xiàn)特定的子類的對象。由于Calendar類是抽象類,且Calendar類的構(gòu)造方法是protected的,所以無法使用Calendar類的構(gòu)造方法來創(chuàng)建對象,API中提供了getInstance方法用來創(chuàng)建對象。

           

          n         創(chuàng)建一個代表系統(tǒng)當(dāng)前日期的Calendar對象

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

          n         創(chuàng)建一個指定日期的Calendar對象

          使用Calendar類代表特定的時間,需要首先創(chuàng)建一個Calendar的對象,然后再設(shè)定該對象中的年月日參數(shù)來完成。

          //創(chuàng)建一個代表2009612Calendar對象

          Calendar c1 = Calendar.getInstance();

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

           

          l         Calendar類對象字段類型

           

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

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

           

           

          l         Calendar類對象信息的設(shè)置與獲得

          n         Calendar類對象信息的設(shè)置

          u       Set設(shè)置

          Calendar c1 = Calendar.getInstance();

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

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

          利用字段類型設(shè)置

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

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

          // c1對象代表的日期設(shè)置為10號,其它所有的數(shù)值會被重新計算

          c1.set(Calendar.DATE,10);

          //c1對象代表的年份設(shè)置為2008年,其他的所有數(shù)值會被重新計算

          c1.set(Calendar.YEAR,2008);

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

          u       Add設(shè)置

          Calendar c1 = Calendar.getInstance();

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

          c1.add(Calendar.DATE, 10);

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

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

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

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

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

           

           

          3、         GregorianCalendar

          GregorianCalendar Calendar 的一個具體子類,提供了世界上大多數(shù)國家使用的標(biāo)準(zhǔn)日歷系統(tǒng)。

          GregorianCalendar類對象的創(chuàng)建

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

          GregorianCalendar()
                    
          在具有默認語言環(huán)境的默認時區(qū)內(nèi)使用當(dāng)前時間構(gòu)造一個默認的 GregorianCalendar。

          GregorianCalendar(int year, int month, int dayOfMonth)
                    
          在具有默認語言環(huán)境的默認時區(qū)內(nèi)構(gòu)造一個帶有給定日期設(shè)置的 GregorianCalendar。

          GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute)
                    
          為具有默認語言環(huán)境的默認時區(qū)構(gòu)造一個具有給定日期和時間設(shè)置的 GregorianCalendar。

          GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)
                    
          為具有默認語言環(huán)境的默認時區(qū)構(gòu)造一個具有給定日期和時間設(shè)置的 GregorianCalendar。

          創(chuàng)建一個代表當(dāng)前日期的GregorianCalendar對象

          GregorianCalendar gc = new GregorianCalendar();

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

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

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

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

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

          4、         DateFormat

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

          5、         SimpleDateFormat

          public class SimpleDateFormat extends DateFormat

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

          所以本類可以實現(xiàn):String 到 Date   Date到String的互轉(zhuǎn),如下:

           

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

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

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

                     //日期到字符串的轉(zhuǎn)換

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

                     //字符串到日期的轉(zhuǎn)換

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

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

             

          6、         日期類對象之間的互轉(zhuǎn)

          l         Date類對象與long型時間的互轉(zhuǎn)

          //Date類的對象轉(zhuǎn)換為long型時間

          Date d= new Date();

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

          long dLong = d.getTime();

           

          //long型時間轉(zhuǎn)換為Date類的對象

          long time = 1290876532190L;

          //使用Date的構(gòu)造方法完成

          Date d2 = new Date(time);

          l         Calendar對象和long型時間之間的互轉(zhuǎn)

          // Calendar對象轉(zhuǎn)換為相對時間

          Calendar c = Calendar.getInstance();

          long t1 = c.getTimeInMillis();

           

          // 將相對時間轉(zhuǎn)換為Calendar對象

          Calendar c1 = Calendar.getInstance();

          long t = 1252785271098L;

          c1.setTimeInMillis(t1);

          l         Calendar對象和Date對象之間的互轉(zhuǎn)

          // Calendar對象轉(zhuǎn)換為相對時間

          Calendar c = Calendar.getInstance();

          Date d = c.getTime();

           

          // 將相對時間轉(zhuǎn)換為Calendar對象

          Calendar c1 = Calendar.getInstance();

          Date d1 = new Date();

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

          c1.setTime(d1);

           

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

          l         判斷是否是閏年

              /**

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

               *

               * @param year

               * @return

               */

              public static boolean isLeapYear(int year) {

                 GregorianCalendar calendar = new GregorianCalendar();

                 return calendar.isLeapYear(year);

              }

           

          l         獲取當(dāng)前日期的字符串表示形式

              /**

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

               *

               * create date:2009-6-5 author:Administrator

               *

               * @return

               */

              public static String getCurrentDate() {

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

                 // 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         給出任意一個年月日得到該天是星期幾

              /**

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

               *

               * @param date

               *            參數(shù)格式 2009-6-10

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

               */

             

              public static int getWeek(String date) {

           

                 // 注意參數(shù)的大小寫格式

                 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天的那一天的日期 create date:2009-6-11 author:Administrator

               *

               * @param day

               * @return

               */

              public static 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天的那一天的日期 create date:2009-6-11 author:Administrator

               *

               * @param date

               *            格式:2009-6-11

               * @param day

               * @return

               */

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

                     // TODO Auto-generated catch block

                     e.printStackTrace();

                 }

           

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

              }

           

           

           

           /**

               * 獲得給定兩個日期相差度天數(shù)

               * create date:2009-6-23 author:Administrator

               *

               * @param date1

               *            參數(shù)格式:2009-06-21

               * @param date2

               */

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

              }

           

           

           

          posted on 2011-09-27 13:11 順其自然EVO 閱讀(401) 評論(0)  編輯  收藏

          <2011年9月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 新疆| 鸡泽县| 永和县| 定兴县| 修武县| 枝江市| 龙井市| 河北省| 临洮县| 沙河市| 克什克腾旗| 开化县| 宁明县| 鞍山市| 漳州市| 江口县| 巩留县| 南京市| 汉沽区| 白河县| 陆良县| 霍林郭勒市| 遂川县| 南京市| 任丘市| 兴宁市| 韶关市| 上饶市| 中超| 安岳县| 顺昌县| 平安县| 宁远县| 黑龙江省| 罗城| 广昌县| 工布江达县| 临湘市| 汝城县| 南华县| 历史|