posts - 60,comments - 71,trackbacks - 0
          一、JAVA中日期的獲取、設置和格式化
          1)JAVA提供了3個日期類:Date、Calendar和DateFormat。
          Date()方法主要用于創建日期對象并獲取日期;
          Calendar()方法主要用于獲取和設置日期;
          DateFormat()方法主要用于創建日期格式化器,然后再由格式化器將日期轉換為各種日期格式串輸出。
          2)JAVA語言規定的基準日期為格林尼治標準時間1970.1.1.00:00:00,當前日期是由基準日期開始所經歷的毫秒數轉換出來的。
          3)DateFomat類在java.text包中,Date和Calendar類在java.util包中。
          4)實例如下:
          import java.util.*;
          import java.text.*;

          public class DisplayDate {
          public static void main(String[] args){
          Date today;
          Calendar now;
          DateFormat f1,f2;
          String s1,s2;

          System.out.println("\n顯示Date類的相關用法");

          today = new Date();
          System.out.println("new Date()= \t"+ today);

          System.out.println("\n用DateFormat類顯示各種日期格式");

          //顯示各種日期格式
          f1 = DateFormat.getDateInstance();
          s1 = f1.format(today);
          System.out.println("DateFormat.getDateInstance()= \t"+s1);

          f1 = DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA);
          s1 = f1.format(today);
          System.out.println("DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA)= \t"+ s1);

          f1 = DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA);
          s1 = f1.format(today);
          System.out.println("DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA)= \t"+ s1);

          f1 = DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA);
          s1 = f1.format(today);
          System.out.println("DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA)= \t" + s1);

          System.out.println("\n用DateFormat類顯示各種時間格式");

          //顯示各種時間格式
          f1 = DateFormat.getTimeInstance();
          s1 = f1.format(today);
          System.out.println("DateFormat.getTimeInstance()= \t"+s1);

          f1 = DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA);
          s1 = f1.format(today);
          System.out.println("DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA)= \t"+s1);

          f1 = DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA);
          s1 = f1.format(today);
          System.out.println("DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA)= \t"+s1);

          f1 = DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA);
          s1 = f1.format(today);
          System.out.println("DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA)= \t"+s1);

          System.out.println("\n顯示Calendar的相關時間用法");

          now = Calendar.getInstance();
          today = now.getTime();
          System.out.println("Calendar.getInstance().getTime()= \t"+ today.toString());

          }
          }

          程序運行結果顯示如下:

          顯示Date類的相關用法
          new Date()= Fri May 02 13:29:32 CST 2003

          用DateFormat類顯示各種日期格式
          DateFormat.getDateInstance()= 2003-5-2
          DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA)= 2003年5月2日
          DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA)= 2003-5-2
          DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA)= 03-5-2

          用DateFormat類顯示各種時間格式
          DateFormat.getTimeInstance()= 13:29:32
          DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA)= 下午01時29分32秒
          DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA)= 13:29:32
          DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA)= 下午1:29

          顯示Calendar的相關時間用法
          Calendar.getInstance().getTime()= Fri May 02 13:29:33 CST 2003

          1.計算某一月份的最大天數
          Calendar time=Calendar.getInstance();
          time.clear();
          time.set(Calendar.YEAR,year);
          time.set(Calendar.MONTH,i-1);//注意,Calendar對象默認一月為0
          int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數
          注:在使用set方法之前,必須先clear一下,否則很多信息會繼承自系統當前時間
          2.Calendar和Date的轉化
          (1) Calendar轉化為Date
          Calendar cal=Calendar.getInstance();
          Date date=cal.getTime();
          (2) Date轉化為Calendar
          Date date=new Date();
          Calendar cal=Calendar.getInstance();
          cal.setTime(date);
          3.格式化輸出日期時間
          Date date=new Date();
          SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
          System.out.println(df.format(date));
          4.計算一年中的第幾星期
          (1)計算某一天是一年中的第幾星期
          Calendar cal=Calendar.getInstance();
          cal.set(Calendar.YEAR, 2006);
          cal.set(Calendar.MONTH, 8);
          cal.set(Calendar.DAY_OF_MONTH, 3);
          int weekno=cal.get(Calendar.WEEK_OF_YEAR);
          (2)計算一年中的第幾星期是幾號
          SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
          Calendar cal=Calendar.getInstance();
          cal.set(Calendar.YEAR, 2006);
          cal.set(Calendar.WEEK_OF_YEAR, 1);
          cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
          System.out.println(df.format(cal.getTime()));
          輸出:
          2006-01-02
          5.add()和roll()的用法
          (1)add()方法
          SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
          Calendar cal=Calendar.getInstance();
          cal.set(Calendar.YEAR, 2006);
          cal.set(Calendar.MONTH, 8);
          cal.set(Calendar.DAY_OF_MONTH, 3);
          cal.add(Calendar.DATE, -4);
          Date date=cal.getTime();
          System.out.println(df.format(date));
          cal.add(Calendar.DATE, 4);
          date=cal.getTime();
          System.out.println(df.format(date));
          輸出:
          2006-08-30
          2006-09-03
          (2)roll方法
          cal.set(Calendar.YEAR, 2006);
          cal.set(Calendar.MONTH, 8);
          cal.set(Calendar.DAY_OF_MONTH, 3);
          cal.roll(Calendar.DATE, -4);
          date=cal.getTime();
          System.out.println(df.format(date));
          cal.roll(Calendar.DATE, 4);
          date=cal.getTime();
          System.out.println(df.format(date));
          輸出:
          2006-09-29
          2006-09-03
          可見,roll()方法在本月內循環,一般使用add()方法;
          6.計算兩個任意時間中間的間隔天數
          (1)傳進Calendar對象

          /** *//**計算兩個時間之間相隔天數
          * @param startday 開始時間
          * @param endday 結束時間
          * @return
          */
          public int getIntervalDays(Calendar startday,Calendar endday)...{
          //確保startday在endday之前
          if(startday.after(endday))...{
          Calendar cal=startday;
          startday=endday;
          endday=cal;
          }
          //分別得到兩個時間的毫秒數
          long sl=startday.getTimeInMillis();
          long el=endday.getTimeInMillis();

          long ei=el-sl;
          //根據毫秒數計算間隔天數
          return (int)(ei/(1000*60*60*24));
          }

          (2)傳進Date對象
          /** *//**計算兩個時間之間相隔天數
          * @param startday 開始時間
          * @param endday 結束時間
          * @return
          */
          public int getIntervalDays(Date startday,Date endday)...{
          //確保startday在endday之前
          if(startday.after(endday))...{
          Date cal=startday;
          startday=endday;
          endday=cal;
          }
          //分別得到兩個時間的毫秒數
          long sl=startday.getTime();
          long el=endday.getTime();

          long ei=el-sl;
          //根據毫秒數計算間隔天數
          return (int)(ei/(1000*60*60*24));
          }同理,可以用相同的方法計算出任意兩個時間相隔的小時數,分鐘數,秒鐘數等
          注:以上方法是完全按時間計算,有時并不能令人滿意,如:
          startday="2006-10-11 20:00:00"
          endday="2006-10-12 8:00:00"
          計算結果為0,但是我們也許相讓計算結果變為1,此時可以用如下方法實現:
          在傳參之前,先設定endday的時間,如:
          endday.set(Calendar.HOUR_OF_DAY, 23);
          endday.set(Calendar.MINUTE, 59);
          endday.set(Calendar.SECOND, 59);
          endday.set(Calendar.MILLISECOND, 59);
          這樣再傳進去startday,endday,則結果就如我們所愿了。不過,如果嫌以上方法麻煩,可以參考以下方法:
          (3)改進精確計算相隔天數的方法
          public int getDaysBetween (Calendar d1, Calendar d2) ...{
          if (d1.after(d2)) ...{ // swap dates so that d1 is start and d2 is end
          java.util.Calendar swap = d1;
          d1 = d2;
          d2 = swap;
          }
          int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
          int y2 = d2.get(Calendar.YEAR);
          if (d1.get(Calendar.YEAR) != y2) ...{
          d1 = (Calendar) d1.clone();
          do ...{
          days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到當年的實際天數
          d1.add(Calendar.YEAR, 1);
          } while (d1.get(Calendar.YEAR) != y2);
          }
          return days;

          posted on 2008-07-08 11:12 henry1451 閱讀(1225) 評論(2)  編輯  收藏

          FeedBack:
          # re: java 基礎時間格式化
          2008-12-30 13:18 | 北京時間
          我也遇到同樣的問題  回復  更多評論
            
          # re: java 基礎時間格式化
          2009-01-07 15:13 | 磁鋼
          gyhtt  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 长春市| 新巴尔虎左旗| 咸宁市| 无棣县| 河曲县| 青州市| 永善县| 吉首市| 眉山市| 南江县| 泰顺县| 浮梁县| 陈巴尔虎旗| 广宁县| 鄱阳县| 西城区| 株洲市| 平乡县| 邵东县| 朝阳区| 绍兴县| 科尔| 松江区| 灵川县| 米林县| 东乡县| 时尚| 抚松县| 威海市| 靖远县| 涞水县| 元江| 塘沽区| 额济纳旗| 盘锦市| 武安市| 从江县| 广宁县| 农安县| 嘉义县| 武汉市|