<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無名的博客

    Java中一些關(guān)于日期、日期格式、日期的解析和日期的計算

         Java 語言的Calendar(日歷),Date(日期), 和DateFormat(日期格式)組成了Java標(biāo)準(zhǔn)的一個基本但是非常重要的部分. 日期是商業(yè)邏輯計算一個關(guān)鍵的部分. 所有的開發(fā)者都應(yīng)該能夠計算未來的日期, 定制日期的顯示格式, 并將文本數(shù)據(jù)解析成日期對象.

        Date 類實(shí)際上只是一個包裹類, 它包含的是一個長整型數(shù)據(jù), 表示的是從GMT(格林尼治標(biāo)準(zhǔn)時間)1970年, 1 月 1日00:00:00這一刻之前或者是之后經(jīng)歷的毫秒數(shù).

    一、創(chuàng)建一個日期對象
        使用系統(tǒng)的當(dāng)前日期和時間創(chuàng)建一個日期對象并返回一個長整數(shù)的簡單例子. 這個時間通常被稱為Java 虛擬機(jī)(JVM)主機(jī)環(huán)境的系統(tǒng)時間.

    Date date = new Date();
    System.out.println(date.getTime());

        上面的例子在系統(tǒng)輸出設(shè)備上顯示的結(jié)果是 1001803809710. 在這個例子中,值得注意的是我們使用了Date 構(gòu)造函數(shù)創(chuàng)建一個日期對象, 這個構(gòu)造函數(shù)沒有接受任何參數(shù). 而這個構(gòu)造函數(shù)在內(nèi)部使用了System.currentTimeMillis() 方法來從系統(tǒng)獲取日期.
    二、日期數(shù)據(jù)的定制格式
        定制日期數(shù)據(jù)的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成這個工作:

    SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
    Date date = new Date();
    System.out.println(bartDateFormat.format(date));

        只要通過向SimpleDateFormat 的構(gòu)造函數(shù)傳遞格式字符串"EEE-MMMM-dd-yyyy", 我們就能夠指明自己想要的格式. 你應(yīng)該可以看見, 格式字符串中的ASCII 字符告訴格式化函數(shù)下面顯示日期數(shù)據(jù)的哪一個部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的個數(shù)決定了日期是如何格式化的.傳遞"EE-MM-dd-yy"會顯示 Sat-09-29-01.
        下面是一些格式:
    Date and Time Pattern Result
    "yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
    "EEE, MMM d, ''yy" Wed, Jul 4, '01
    "h:mm a" 12:08 PM
    "hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
    "K:mm a, z" 0:08 PM, PDT
    "yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
    "EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
    "yyMMddHHmmssZ" 010704120856-0700


    三、將文本數(shù)據(jù)解析成日期對象
        假設(shè)我們有一個文本字符串包含了一個格式化了的日期對象, 而我們希望解析這個字符串并從文本日期數(shù)據(jù)創(chuàng)建一個日期對象. 我們將再次以格式化字符串"MM-dd-yyyy" 調(diào)用SimpleDateFormat類, 但是這一次, 我們使用格式化解析而不是生成一個文本日期數(shù)據(jù). 我們的例子, 顯示在下面, 將解析文本字符串"9-29-2001"并創(chuàng)建一個值為001736000000 的日期對象.

    SimpleDateFormat bartDateFormat = new SimpleDateFormat("MM-dd-yyyy");
    String dateStringToParse = "9-29-2001";
    try {
    Date date = bartDateFormat.parse(dateStringToParse);
    System.out.println(date.getTime());
    } catch (Exception ex) {
    System.out.println(ex.getMessage());
    }

    四、使用標(biāo)準(zhǔn)的日期格式化過程

    既然我們已經(jīng)可以生成和解析定制的日期格式了, 讓我們來看一看如何使用內(nèi)建的格式化過程. 方法 DateFormat.getDateTimeInstance() 讓我們得以用幾種不同的方法獲得標(biāo)準(zhǔn)的日期格式化過程. 在下面的例子中, 我們獲取了四個內(nèi)建的日期格式化過程. 它們包括一個短的, 中等的, 長的, 和完整的日期格式.

    Date date = new Date();

    DateFormat shortDateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
    DateFormat mediumDateFormat =DateFormat.getDateTimeInstance( DateFormat.MEDIUM, teFormat.MEDIUM);
    DateFormat longDateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG); DateFormat fullDateFormat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL);

    System.out.println(shortDateFormat.format(date));
    System.out.println(mediumDateFormat.format(date));
    System.out.println(longDateFormat.format(date));
    System.out.println(fullDateFormat.format(date));

    注意我們在對 getDateTimeInstance的每次調(diào)用中都傳遞了兩個值. 第一個參數(shù)是日期風(fēng)格, 而第二個參數(shù)是時間風(fēng)格. 它們都是基本數(shù)據(jù)類型int(整型). 考慮到可讀性, 我們使用了DateFormat 類提供的常量: SHORT, MEDIUM, LONG, 和 FULL.
    運(yùn)行例子程序的時候, 它將向標(biāo)準(zhǔn)輸出設(shè)備輸出下面的內(nèi)容:
    9/29/01 8:44 PM
    Sep 29, 2001 8:44:45 PM
    September 29, 2001 8:44:45 PM EDT
    Saturday, September 29, 2001 8:44:45 PM EDT

    五、Calendar 類

    假設(shè)你想要設(shè)置, 獲取, 和操縱一個日期對象的各個部分, 比方一個月的一天或者是一個星期的一天. 為了演示這個過程, 我們將使用具體的子類 java.util.GregorianCalendar. 考慮下面的例子, 它計算得到下面的第十個星期五是13號.


    DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);

    GregorianCalendar cal = new GregorianCalendar();

    cal.setTime(new Date());
    System.out.println("System Date: " + dateFormat.format(cal.getTime()));

    // Set the day of week to FRIDAY
    cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);
    System.out.println("After Setting Day of Week to Friday: " +
    dateFormat.format(cal.getTime()));

    int friday13Counter = 0;

    while (friday13Counter <= 10)
    {

    // Go to the next Friday by adding 7 days.
    cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

    // If the day of month is 13 we have
    // another Friday the 13th.
    if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13)
    {
    friday13Counter++;
    System.out.println(dateFormat.format(cal.getTime()));
    }
    }

    在這個例子中作了有趣的函數(shù)調(diào)用:
    cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);

    cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

    set 方法能夠讓我們通過簡單的設(shè)置星期中的哪一天這個域來將我們的時間調(diào)整為星期五. 注意到這里我們使用了常量 DAY_OF_WEEK 和 FRIDAY來增強(qiáng)代碼的可讀性. add 方法讓我們能夠在日期上加上數(shù)值. 潤年的所有復(fù)雜的計算都由這個方法自動處理.

    我們這個例子的輸出結(jié)果是:
    System Date: Saturday, September 29, 2001
    當(dāng)我們將它設(shè)置成星期五以后就成了: Friday, September 28, 2001
    Friday, September 13, 2002
    Friday, December 13, 2002
    Friday, June 13, 2003
    Friday, February 13, 2004
    Friday, August 13, 2004
    Friday, May 13, 2005
    Friday, January 13, 2006
    Friday, October 13, 2006
    Friday, April 13, 2007
    Friday, July 13, 2007
    Friday, June 13, 2008

    GregorianCalendar類提供處理日期的方法。一個有用的方法是add().使用add()方法,你能夠增加象年,月數(shù),天數(shù)到日期對象中。要使用add()方法,你必須提供要增加的字段,要增加的數(shù)量。一些有用的字段是DATE, MONTH, YEAR, 和 WEEK_OF_YEAR。下面的程序使用add()方法計算未來80天的一個日期。在Jules的<環(huán)球80天>是一個重要的數(shù)字,使用這個程序可以計算Phileas Fogg從出發(fā)的那一天1872年10月2日后80天的日期:

    GregorianCalendar worldTour = new GregorianCalendar(1872, Calendar.OCTOBER, 2);
    worldTour.add(GregorianCalendar.DATE, 80);
    Date d = worldTour.getTime();
    DateFormat df = DateFormat.getDateInstance();
    String s = df.format(d);
    System.out.println("80 day trip will end " + s);

    五、實(shí)現(xiàn)日期以天數(shù)的加減:
    /* 將當(dāng)前日期加減n天數(shù)。
    * 如傳入字符型"-5" 意為將當(dāng)前日期減去5天的日期
    * 如傳入字符型"5" 意為將當(dāng)前日期加上5天后的日期
    * 返回字串 例(1999-02-03)
    */

    public String dateAdd(String to)
    {
    //日期處理模塊 (將日期加上某些天或減去天數(shù))返回字符串
    int strTo;
    try {
       strTo = Integer.parseInt(to);}
    catch (Exception e) {
       System.out.println("日期標(biāo)識轉(zhuǎn)換出錯! : \n:::" + to + "不能轉(zhuǎn)為數(shù)字型");
       e.printStackTrace();
       strTo = 0;
    }
    Calendar strDate = Calendar.getInstance(); //java.util包,設(shè)置當(dāng)前時間
    strDate.add(strDate.DATE, strTo); //日期減 如果不夠減會將月變動 //生成 (年-月-日)
    String meStrDate = strDate.get(strDate.YEAR) + "-" +String.valueOf(strDate.get(strDate.MONTH)+1) + "-" + strDate.get(strDate.DATE);
    return meStrDate;
    }

    posted on 2005-10-28 11:00 十三郎 閱讀(1062) 評論(0)  編輯  收藏 所屬分類: J2SE


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 午夜老司机免费视频| 一级毛片免费播放视频| 国产亚洲欧洲精品| 亚洲愉拍99热成人精品热久久| 亚洲午夜久久久影院| 一级毛片免费播放视频| 亚洲人成电影在线播放| 亚洲av无码一区二区三区不卡 | 无码免费午夜福利片在线 | 18禁无遮挡无码网站免费| 免费播放特黄特色毛片| 中文字幕第13亚洲另类| 亚洲欧洲日产国码在线观看| 亚洲精品无码久久久久秋霞| 国产精品九九久久免费视频| 91短视频免费在线观看| 老司机永久免费网站在线观看| 国产亚洲精品无码专区| 中国好声音第二季免费播放| 久久精品网站免费观看 | 亚洲视频中文字幕| 亚洲人成欧美中文字幕| 国产精品麻豆免费版| 久久久久亚洲精品无码蜜桃| 欧洲乱码伦视频免费国产| 国产成人午夜精品免费视频| 亚洲最大天堂无码精品区| 在线美女免费观看网站h| 亚洲AV蜜桃永久无码精品| 亚洲自偷精品视频自拍| 插鸡网站在线播放免费观看| 亚洲人成色77777| 亚洲免费在线视频播放| 亚洲精品无码mⅴ在线观看| 999zyz**站免费毛片| 日韩中文无码有码免费视频| 亚洲制服丝袜在线播放| 久久香蕉国产线看免费| 精品国产日韩亚洲一区| 91久久精品国产免费一区| 亚洲成av人片天堂网无码】|