Date日期宙地,DateFormat類和Calendar日歷

Date日期

概述

java.util.Date類 表示特定的瞬間,精確到毫秒秽梅。

繼續(xù)查閱Date類的描述,發(fā)現(xiàn)Date擁有多個(gè)構(gòu)造函數(shù)环壤,只是部分已經(jīng)過時(shí)郑现,但是其中有未過時(shí)的構(gòu)造函數(shù)可以把毫秒值轉(zhuǎn)成日期對(duì)象接箫。

  • public Date():分配Date對(duì)象并初始化此對(duì)象辛友,以表示分配它的時(shí)間(精確到毫秒)瞎领。
  • public Date(long date):分配Date對(duì)象并初始化此對(duì)象九默,以表示自從標(biāo)準(zhǔn)基準(zhǔn)時(shí)間(稱為“歷元(epoch)”宾毒,即1970年1月1日00:00:00 GMT)以來(lái)的指定毫秒數(shù)乙各。

tips: 由于我們處于東八區(qū)耳峦,所以我們的基準(zhǔn)時(shí)間為1970年1月1日8時(shí)0分0秒蹲坷。

簡(jiǎn)單來(lái)說(shuō):使用無(wú)參構(gòu)造循签,可以自動(dòng)設(shè)置當(dāng)前系統(tǒng)時(shí)間的毫秒時(shí)刻县匠;指定long類型的構(gòu)造參數(shù)乞旦,可以自定義毫秒時(shí)刻杆查。例如:

/*
    java.util.Date:表示日期和時(shí)間的類
    類 Date 表示特定的瞬間闺阱,精確到毫秒。
    毫秒:千分之一秒 1000毫秒=1秒
    特定的瞬間:一個(gè)時(shí)間點(diǎn),一剎那時(shí)間
    2088-08-08 09:55:33:333 瞬間
    2088-08-08 09:55:33:334 瞬間
    2088-08-08 09:55:33:334 瞬間
    ...
    毫秒值的作用:可以對(duì)時(shí)間和日期進(jìn)行計(jì)算
    2099-01-03 到 2088-01-01 中間一共有多少天
    可以日期轉(zhuǎn)換為毫秒進(jìn)行計(jì)算,計(jì)算完畢,在把毫秒轉(zhuǎn)換為日期

    把日期轉(zhuǎn)換為毫秒:
        當(dāng)前的日期:2088-01-01
        時(shí)間原點(diǎn)(0毫秒):1970 年 1 月 1 日 00:00:00(英國(guó)格林威治)
        就是計(jì)算當(dāng)前日期到時(shí)間原點(diǎn)之間一共經(jīng)歷了多少毫秒 (3742767540068L)
    注意:
        中國(guó)屬于東八區(qū),會(huì)把時(shí)間增加8個(gè)小時(shí)
        1970 年 1 月 1 日 08:00:00

    把毫秒轉(zhuǎn)換為日期:
        1 天 = 24 × 60 × 60 = 86400 秒  = 86400 x 1000 = 86400000毫秒
 */
public class Demo01Date {
    public static void main(String[] args) {
        System.out.println(System.currentTimeMillis());//獲取當(dāng)前系統(tǒng)時(shí)間到1970 年 1 月 1 日 00:00:00經(jīng)歷了多少毫秒
    }
}
import java.util.Date;
/*
tips:在使用println方法時(shí)舔琅,會(huì)自動(dòng)調(diào)用Date類中的toString方法备蚓。
Date類對(duì)Object類中的toString方法進(jìn)行了覆蓋重寫郊尝,所以結(jié)果為指定格式的字符串扎即。
*/
public class Demo01Date {
    public static void main(String[] args) {
        // 創(chuàng)建日期對(duì)象谚鄙,把當(dāng)前的時(shí)間
        System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2018
        // 創(chuàng)建日期對(duì)象闷营,把當(dāng)前的毫秒值轉(zhuǎn)成日期對(duì)象
        System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
    }
}

常用方法
Date類中的多數(shù)方法已經(jīng)過時(shí),常用的方法有:

  • public long getTime() 把日期對(duì)象轉(zhuǎn)換成對(duì)應(yīng)的時(shí)間毫秒值。

DateFormat類

java.text.DateFormat 是日期/時(shí)間格式化子類的抽象類,我們通過這個(gè)類可以幫我們完成日期和文本之間的轉(zhuǎn)換,也就是可以在Date對(duì)象與String對(duì)象之間進(jìn)行來(lái)回轉(zhuǎn)換腥光。

  • 格式化:按照指定的格式议双,從Date對(duì)象轉(zhuǎn)換為String對(duì)象平痰。
  • 解析:按照指定的格式,從String對(duì)象轉(zhuǎn)換為Date對(duì)象赔蒲。

構(gòu)造方法

由于DateFormat為抽象類舞虱,不能直接使用,所以需要常用的子類java.text.SimpleDateFormat焕刮。這個(gè)類需要一個(gè)模式(格式)來(lái)指定格式化或解析的標(biāo)準(zhǔn)配并。構(gòu)造方法為:

  • public SimpleDateFormat(String pattern):用給定的模式和默認(rèn)語(yǔ)言環(huán)境的日期格式符號(hào)構(gòu)造SimpleDateFormat。

參數(shù)pattern是一個(gè)字符串观腊,代表日期時(shí)間的自定義格式。

格式規(guī)則

標(biāo)識(shí)字母(區(qū)分大小寫) 含義
y
M
d
H 時(shí)
m
s

常用方法

  • public String format(Date date):將Date對(duì)象格式化為字符串。
  • public Date parse(String source):將字符串解析為Date對(duì)象嫌褪。
public class Demo01DateFormat {
    public static void main(String[] args) throws ParseException {
        demo02();
    }

    /*
         使用DateFormat類中的方法parse,把文本解析為日期
         使用步驟:
            1.創(chuàng)建SimpleDateFormat對(duì)象,構(gòu)造方法中傳遞指定的模式
            2.調(diào)用SimpleDateFormat對(duì)象中的方法parse,把符合構(gòu)造方法中模式的字符串,解析為Date日期
            注意:
                public Date parse(String source) throws ParseException
                parse方法聲明了一個(gè)異常叫ParseException
                如果字符串和構(gòu)造方法的模式不一樣,那么程序就會(huì)拋出此異常
                調(diào)用一個(gè)拋出了異常的方法,就必須的處理這個(gè)異常,要么throws繼續(xù)拋出這個(gè)異常,要么try catch自己處理
     */
    private static void demo02() throws ParseException {
        //1.創(chuàng)建SimpleDateFormat對(duì)象,構(gòu)造方法中傳遞指定的模式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH時(shí)mm分ss秒");
        //2.調(diào)用SimpleDateFormat對(duì)象中的方法parse,把符合構(gòu)造方法中模式的字符串,解析為Date日期
        //Date parse(String source)  把符合模式的字符串,解析為Date日期
        Date date = sdf.parse("2088年08月08日 15時(shí)51分54秒");
        System.out.println(date);
    }

    /*
        使用DateFormat類中的方法format,把日期格式化為文本
        使用步驟:
            1.創(chuàng)建SimpleDateFormat對(duì)象,構(gòu)造方法中傳遞指定的模式
            2.調(diào)用SimpleDateFormat對(duì)象中的方法format,按照構(gòu)造方法中指定的模式,把Date日期格式化為符合模式的字符串(文本)
     */
    private static void demo01() {
        //1.創(chuàng)建SimpleDateFormat對(duì)象,構(gòu)造方法中傳遞指定的模式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH時(shí)mm分ss秒");
        //2.調(diào)用SimpleDateFormat對(duì)象中的方法format,按照構(gòu)造方法中指定的模式,把Date日期格式化為符合模式的字符串(文本)
        //String format(Date date)  按照指定的模式,把Date日期,格式化為符合模式的字符串
        Date date = new Date();
        String d = sdf.format(date);
        System.out.println(date);//Sun Aug 08 15:51:54 CST 2088
        System.out.println(d);//2088年08月08日 15時(shí)51分54秒
    }
}

注意:
模式中的字母不能更改,連接模式的符號(hào)可以改變
"yyyy年MM月dd日 HH時(shí)mm分ss秒"


Calendar日歷

/*
    java.util.Calendar類:日歷類
    Calendar類是一個(gè)抽象類,里邊提供了很多操作日歷字段的方法(YEAR财忽、MONTH紧唱、DAY_OF_MONTH、HOUR )
    Calendar類無(wú)法直接創(chuàng)建對(duì)象使用,里邊有一個(gè)靜態(tài)方法叫g(shù)etInstance(),該方法返回了Calendar類的子類對(duì)象
    static Calendar getInstance() 使用默認(rèn)時(shí)區(qū)和語(yǔ)言環(huán)境獲得一個(gè)日歷。
 */
public class Demo01Calendar {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();//多態(tài)
        System.out.println(c);
    }

}

/*
    Calendar類的常用成員方法:
        public int get(int field):返回給定日歷字段的值轻庆。
        public void set(int field, int value):將給定的日歷字段設(shè)置為給定值。
        public abstract void add(int field, int amount):根據(jù)日歷的規(guī)則,為給定的日歷字段添加或減去指定的時(shí)間量。
        public Date getTime():返回一個(gè)表示此Calendar時(shí)間值(從歷元到現(xiàn)在的毫秒偏移量)的Date對(duì)象。
    成員方法的參數(shù):
        int field:日歷類的字段,可以使用Calendar類的靜態(tài)成員變量獲取
            public static final int YEAR = 1;   年
            public static final int MONTH = 2;  月
            public static final int DATE = 5;   月中的某一天
            public static final int DAY_OF_MONTH = 5;月中的某一天
            public static final int HOUR = 10;      時(shí)
            public static final int MINUTE = 12;    分
            public static final int SECOND = 13;    秒
 */
public class Demo02Calendar {
    public static void main(String[] args) {
        demo04();
    }

    /*
        public Date getTime():返回一個(gè)表示此Calendar時(shí)間值(從歷元到現(xiàn)在的毫秒偏移量)的Date對(duì)象。
        把日歷對(duì)象,轉(zhuǎn)換為日期對(duì)象
     */
    private static void demo04() {
        //使用getInstance方法獲取Calendar對(duì)象
        Calendar c = Calendar.getInstance();

        Date date = c.getTime();
        System.out.println(date);
    }

    /*
        public abstract void add(int field, int amount):根據(jù)日歷的規(guī)則隘擎,為給定的日歷字段添加或減去指定的時(shí)間量。
        把指定的字段增加/減少指定的值
        參數(shù):
            int field:傳遞指定的日歷字段(YEAR,MONTH...)
            int amount:增加/減少指定的值
                正數(shù):增加
                負(fù)數(shù):減少
     */
    private static void demo03() {
        //使用getInstance方法獲取Calendar對(duì)象
        Calendar c = Calendar.getInstance();

        //把年增加2年
        c.add(Calendar.YEAR,2);
        //把月份減少3個(gè)月
        c.add(Calendar.MONTH,-3);


        int year = c.get(Calendar.YEAR);
        System.out.println(year);

        int month = c.get(Calendar.MONTH);
        System.out.println(month);//西方的月份0-11 東方:1-12

        //int date = c.get(Calendar.DAY_OF_MONTH);
        int date = c.get(Calendar.DATE);
        System.out.println(date);
    }

    /*
        public void set(int field, int value):將給定的日歷字段設(shè)置為給定值蹲姐。
        參數(shù):
            int field:傳遞指定的日歷字段(YEAR,MONTH...)
            int value:給指定字段設(shè)置的值
     */
    private static void demo02() {
        //使用getInstance方法獲取Calendar對(duì)象
        Calendar c = Calendar.getInstance();

        //設(shè)置年為9999
        c.set(Calendar.YEAR,9999);
        //設(shè)置月為9月
        c.set(Calendar.MONTH,9);
        //設(shè)置日9日
        c.set(Calendar.DATE,9);

        //同時(shí)設(shè)置年月日,可以使用set的重載方法
        c.set(8888,8,8);

        int year = c.get(Calendar.YEAR);
        System.out.println(year);

        int month = c.get(Calendar.MONTH);
        System.out.println(month);//西方的月份0-11 東方:1-12

        int date = c.get(Calendar.DATE);
        System.out.println(date);
    }

    /*
        public int get(int field):返回給定日歷字段的值柴墩。
        參數(shù):傳遞指定的日歷字段(YEAR,MONTH...)
        返回值:日歷字段代表的具體的值
     */
    private static void demo01() {
        //使用getInstance方法獲取Calendar對(duì)象
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        System.out.println(year);

        int month = c.get(Calendar.MONTH);
        System.out.println(month);//西方的月份0-11 東方:1-12

        //int date = c.get(Calendar.DAY_OF_MONTH);
        int date = c.get(Calendar.DATE);
        System.out.println(date);
    }
}

根據(jù)Calendar類的API文檔,常用方法有:

  • public int get(int field):返回給定日歷字段的值凫岖。
  • public void set(int field, int value):將給定的日歷字段設(shè)置為給定值江咳。
  • public abstract void add(int field, int amount):根據(jù)日歷的規(guī)則,為給定的日歷字段添加或減去指定的時(shí)間量哥放。
  • public Date getTime():返回一個(gè)表示此Calendar時(shí)間值(從歷元到現(xiàn)在的毫秒偏移量)的Date對(duì)象歼指。
    Calendar類中提供很多成員常量,代表給定的日歷字段:
字段值 含義
YEAR
MONTH 月(從0開始甥雕,可以+1使用)
DAY_OF_MONTH 月中的天(幾號(hào))
HOUR 時(shí)(12小時(shí)制)
HOUR_OF_DAY 時(shí)(24小時(shí)制)
MINUTE
SECOND
DAY_OF_WEEK 周中的天(周幾踩身,周日為1,可以-1使用)

小貼士:

 西方星期的開始為周日犀农,中國(guó)為周一惰赋。

 在Calendar類中,月份的表示是以0-11代表1-12月呵哨。

 日期是有大小關(guān)系的赁濒,時(shí)間靠后,時(shí)間越大孟害。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拒炎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子挨务,更是在濱河造成了極大的恐慌击你,老刑警劉巖玉组,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異丁侄,居然都是意外死亡惯雳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門鸿摇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)石景,“玉大人,你說(shuō)我怎么就攤上這事拙吉〕蹦酰” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵筷黔,是天一觀的道長(zhǎng)往史。 經(jīng)常有香客問我,道長(zhǎng)佛舱,這世上最難降的妖魔是什么椎例? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮请祖,結(jié)果婚禮上粟矿,老公的妹妹穿的比我還像新娘。我一直安慰自己损拢,他們只是感情好陌粹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著福压,像睡著了一般掏秩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荆姆,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天蒙幻,我揣著相機(jī)與錄音,去河邊找鬼胆筒。 笑死邮破,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的仆救。 我是一名探鬼主播抒和,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼彤蔽!你這毒婦竟也來(lái)了摧莽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤顿痪,失蹤者是張志新(化名)和其女友劉穎镊辕,沒想到半個(gè)月后油够,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡征懈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年石咬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卖哎。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碌补,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棉饶,到底是詐尸還是另有隱情,我是刑警寧澤镇匀,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布照藻,位于F島的核電站,受9級(jí)特大地震影響汗侵,放射性物質(zhì)發(fā)生泄漏幸缕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一晰韵、第九天 我趴在偏房一處隱蔽的房頂上張望发乔。 院中可真熱鬧,春花似錦雪猪、人聲如沸栏尚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)译仗。三九已至,卻和暖如春官觅,著一層夾襖步出監(jiān)牢的瞬間纵菌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工休涤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咱圆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓功氨,卻偏偏與公主長(zhǎng)得像序苏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捷凄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348