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

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

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

    seaairland

     

    java Calendar Date DateFormat

    Java 語(yǔ)言的Calendar(日歷),Date(日期), 和DateFormat(日期格式)組成了Java標(biāo)準(zhǔn)的一個(gè)基本但是非常重要的部分. 日期是商業(yè)邏輯計(jì)算一個(gè)關(guān)鍵的部分. 所有的開(kāi)發(fā)者都應(yīng)該能夠計(jì)算未來(lái)的日期, 定制日期的顯示格式, 并將文本數(shù)據(jù)解析成日期對(duì)象. 我們寫(xiě)了兩篇文章, 這是第一篇, 我們將大概的學(xué)習(xí)日期, 日期格式, 日期的解析和日期的計(jì)算.


    我們將討論下面的類:

    1、具體類(和抽象類相對(duì))java.util.Date
    2、抽象類java.text.DateFormat 和它的一個(gè)具體子類,java.text.SimpleDateFormat
    3、抽象類java.util.Calendar 和它的一個(gè)具體子類,java.util.GregorianCalendar

    具體類可以被實(shí)例化, 但是抽象類卻不能. 你首先必須實(shí)現(xiàn)抽象類的一個(gè)具體子類.

    Date 類從Java 開(kāi)發(fā)包(JDK) 1.0 就開(kāi)始進(jìn)化, 當(dāng)時(shí)它只包含了幾個(gè)取得或者設(shè)置一個(gè)日期數(shù)據(jù)的各個(gè)部分的方法, 比如說(shuō)月, 日, 和年. 這些方法現(xiàn)在遭到了批評(píng)并且已經(jīng)被轉(zhuǎn)移到了Calendar類里去了, 我們將在本文中進(jìn)一步討論它. 這種改進(jìn)旨在更好的處理日期數(shù)據(jù)的國(guó)際化格式. 就象在JDK 1.1中一樣, Date 類實(shí)際上只是一個(gè)包裹類, 它包含的是一個(gè)長(zhǎng)整型數(shù)據(jù), 表示的是從GMT(格林尼治標(biāo)準(zhǔn)時(shí)間)1970年, 1 月 1日00:00:00這一刻之前或者是之后經(jīng)歷的毫秒數(shù).


    一、創(chuàng)建一個(gè)日期對(duì)象

    讓我們看一個(gè)使用系統(tǒng)的當(dāng)前日期和時(shí)間創(chuàng)建一個(gè)日期對(duì)象并返回一個(gè)長(zhǎng)整數(shù)的簡(jiǎn)單例子. 這個(gè)時(shí)間通常被稱為Java 虛擬機(jī)(JVM)主機(jī)環(huán)境的系統(tǒng)時(shí)間.
    import java.util.Date;

    public class DateExample1 {
    public static void main(String[] args) {
    // Get the system date/time
    Date date = new Date();

    System.out.println(date.getTime());
    }
    }


    在星期六, 2001年9月29日, 下午大約是6:50的樣子, 上面的例子在系統(tǒng)輸出設(shè)備上顯示的結(jié)果是 1001803809710. 在這個(gè)例子中,值得注意的是我們使用了Date 構(gòu)造函數(shù)創(chuàng)建一個(gè)日期對(duì)象, 這個(gè)構(gòu)造函數(shù)沒(méi)有接受任何參數(shù). 而這個(gè)構(gòu)造函數(shù)在內(nèi)部使用了System.currentTimeMillis() 方法來(lái)從系統(tǒng)獲取日期.

    那么, 現(xiàn)在我們已經(jīng)知道了如何獲取從1970年1月1日開(kāi)始經(jīng)歷的毫秒數(shù)了. 我們?nèi)绾尾拍芤砸环N用戶明白的格式來(lái)顯示這個(gè)日期呢? 在這里類java.text.SimpleDateFormat 和它的抽象基類 java.text.DateFormat 就派得上用場(chǎng)了.


    二、日期數(shù)據(jù)的定制格式

    假如我們希望定制日期數(shù)據(jù)的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成這個(gè)工作:
    import java.text.SimpleDateFormat;
    import java.util.Date;

    public class DateExample2 {

    public static void main(String[] args) {

    SimpleDateFormat bartDateFormat =
    new SimpleDateFormat("EEEE-MMMM-dd-yyyy");

    Date date = new Date();

    System.out.println(bartDateFormat.format(date));
    }
    }

    只要通過(guò)向SimpleDateFormat 的構(gòu)造函數(shù)傳遞格式字符串"EEE-MMMM-dd-yyyy", 我們就能夠指明自己想要的格式. 你應(yīng)該可以看見(jiàn), 格式字符串中的ASCII 字符告訴格式化函數(shù)下面顯示日期數(shù)據(jù)的哪一個(gè)部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的個(gè)數(shù)決定了日期是如何格式化的.傳遞"EE-MM-dd-yy"會(huì)顯示 Sat-09-29-01. 請(qǐng)察看Sun 公司的Web 站點(diǎn)獲取日期格式化選項(xiàng)的完整的指示.

    三、將文本數(shù)據(jù)解析成日期對(duì)象

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

    例子程序:
    import java.text.SimpleDateFormat;
    import java.util.Date;

    public class DateExample3 {

    public static void main(String[] args) {
    // Create a date formatter that can parse dates of
    // the form MM-dd-yyyy.
    SimpleDateFormat bartDateFormat =
    new SimpleDateFormat("MM-dd-yyyy");

    // Create a string containing a text date to be parsed.
    String dateStringToParse = "9-29-2001";

    try {
    // Parse the text version of the date.
    // We have to perform the parse method in a
    // try-catch construct in case dateStringToParse
    // does not contain a date in the format we are expecting.
    Date date = bartDateFormat.parse(dateStringToParse);

    // Now send the parsed date as a long value
    // to the system output.
    System.out.println(date.getTime());
    }
    catch (Exception ex) {
    System.out.println(ex.getMessage());
    }
    }
    }

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

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

    public class DateExample4 {

    public static void main(String[] args) {
    Date date = new Date();

    DateFormat shortDateFormat =
    DateFormat.getDateTimeInstance(
    DateFormat.SHORT,
    DateFormat.SHORT);

    DateFormat mediumDateFormat =
    DateFormat.getDateTimeInstance(
    DateFormat.MEDIUM,
    DateFormat.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));
    }
    }

    注意我們?cè)趯?duì) getDateTimeInstance的每次調(diào)用中都傳遞了兩個(gè)值. 第一個(gè)參數(shù)是日期風(fēng)格, 而第二個(gè)參數(shù)是時(shí)間風(fēng)格. 它們都是基本數(shù)據(jù)類型int(整型). 考慮到可讀性, 我們使用了DateFormat 類提供的常量: SHORT, MEDIUM, LONG, 和 FULL. 要知道獲取時(shí)間和日期格式化過(guò)程的更多的方法和選項(xiàng), 請(qǐng)看Sun 公司W(wǎng)eb 站點(diǎn)上的解釋.

    運(yùn)行我們的例子程序的時(shí)候, 它將向標(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 類

    我們現(xiàn)在已經(jīng)能夠格式化并創(chuàng)建一個(gè)日期對(duì)象了, 但是我們?nèi)绾尾拍茉O(shè)置和獲取日期數(shù)據(jù)的特定部分呢, 比如說(shuō)小時(shí), 日, 或者分鐘? 我們又如何在日期的這些部分加上或者減去值呢? 答案是使用Calendar 類. 就如我們前面提到的那樣, Calendar 類中的方法替代了Date 類中被人唾罵的方法.

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

    public class DateExample5 {

    public static void main(String[] args) {
    DateFormat dateFormat =
    DateFormat.getDateInstance(DateFormat.FULL);

    // Create our Gregorian Calendar.
    GregorianCalendar cal = new GregorianCalendar();

    // Set the date and time of our calendar
    // to the system&s date and time
    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()));
    }
    }
    }
    }

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

    和:
    cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

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

    我們這個(gè)例子的輸出結(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


    七、時(shí)間掌握在你的手里

    有了這些Date 和Calendar 類的例子, 你應(yīng)該能夠使用 java.util.Date, java.text.SimpleDateFormat, 和 java.util.GregorianCalendar 創(chuàng)建許多方法了.

    在下面的文章中, 我們將討論更高級(jí)的Date 和 Calendar 類的使用技巧, 包括時(shí)區(qū)和國(guó)際化的格式. 我們還會(huì)考察兩個(gè)日期類 java.sql.Date 和 java.util.Date 之間的區(qū)別.

    posted on 2006-04-26 17:50 chenhui 閱讀(654) 評(píng)論(0)  編輯  收藏


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


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    介紹 IOC

    友情鏈接

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 免费福利视频导航| 亚洲国产成人五月综合网| 亚洲熟妇少妇任你躁在线观看| 在线观看免费精品国产| 成人无码精品1区2区3区免费看| 老汉色老汉首页a亚洲| 国产成人3p视频免费观看| 免费无码又爽又刺激网站直播| 亚洲综合色一区二区三区| 亚洲成A人片在线观看WWW| 毛片免费观看网址| 免费福利在线视频| 国产亚洲日韩在线a不卡| 久久亚洲AV成人无码电影| 亚洲?v女人的天堂在线观看| **毛片免费观看久久精品| 日韩少妇内射免费播放| 亚洲国产视频一区| 亚洲愉拍99热成人精品热久久 | 久久久精品国产亚洲成人满18免费网站| 亚洲综合久久久久久中文字幕| 国产精品冒白浆免费视频| 一级毛片不卡片免费观看| yellow视频免费看| 亚洲一区二区三区丝袜| 亚洲国产精品久久久久婷婷老年| 波多野结衣中文一区二区免费| 两性刺激生活片免费视频| 国产激情免费视频在线观看 | 一级毛片免费观看不收费| 亚洲一区二区三区四区视频| 亚洲色成人网站WWW永久| 国产一区二区三区在线观看免费| 无码国产精品一区二区免费虚拟VR| a视频在线观看免费| 美女免费精品高清毛片在线视| 亚洲国产精品一区二区久| 国产∨亚洲V天堂无码久久久| 日韩亚洲精品福利| 免费人成在线观看播放国产| 成年美女黄网站18禁免费|