日期相關(guān)類

Date類

java中用于描述日期的類桃漾。Date內(nèi)部維護著一個long值讯检,這個值表示的是1970-01-01 00:00:00到Date所表示的日期之間的毫秒值整袁。

import java.util.Date;
/**
 * java中日期類Date
 */
public class DateTest {
    public static void main(String[] args){
        //創(chuàng)建一個Date實例,志膀,默認的構(gòu)造方法創(chuàng)建的日期代表當前系統(tǒng)時間
        Date date = new Date();
        /**
         * 輸出date對象
         * Tue Feb 27 08:27:54 GMT 2018(jdk1.5)
         * GMT:格林威治時間,世界上計時流行的標志
         * 中國所屬的時區(qū)為+8區(qū)鳖擒,所有要對時間上的小時+8
         * Tue Feb 27 16:27:54 CST 2018(jdk1.6及以后)
         * CST:中部標準時間,同時代表了下面4個時區(qū):
         * CST Central Standard Time (USA) UT-6:00
         * CST Central Standard Time (Australia) UT 9:30
         * CST China Standard Time UT 8:00
         * CST Cuba Standard Time UT-4:00
         */
        System.out.println(date);//Thu Mar 14 13:56:34 CST 2019
        //查看date內(nèi)部的毫秒值
        long time = date.getTime();
        System.out.println(time);//1552542994191
        System.out.println(System.currentTimeMillis());//1552542994191
        //設(shè)置一個一天后的當前時間溉浙,讓Date表示該日期
        date.setTime(time+1000*60*60*24);
        System.out.println(date);
        /**
         * 獲取當前年份
         * 不推薦使用,會有千年蟲問題
         * 對于日期的計算蒋荚,推薦使用Calendar類
         */
        int year=date.getYear();
    }
}

Calendar類

日歷類戳稽,Calendar不存在千年蟲問題。并且可以非常方便的計算日期期升。

import java.util.Calendar;
import java.util.Date;
/**
 * 日歷類
 */
public class CalendarTest {
    public static void main(String[] args){
        /**
         * 通過Calendar的靜態(tài)方法獲取一個實例
         * 該方法會自行決定時區(qū)惊奇,幫我們創(chuàng)建Calendar實例
         * 該方法會根據(jù)當前系統(tǒng)所在地區(qū)來決定時區(qū)
         * 這里要注意,實際上根據(jù)不同的時區(qū)播赁,Calendar有若干個
         * 子類實現(xiàn)颂郎。而Calendar本身是抽象類,不能實例化容为!
         * 我們不需要關(guān)心創(chuàng)建的實例具體為哪個子類乓序,我們只需要根據(jù)
         * Calendar規(guī)定的方法來使用就可以了寺酪。
         */
        //構(gòu)造出來表示當前時間的日歷類
        Calendar calendar = Calendar.getInstance();
        /**
         * 日歷類所解決的根本問題是簡化日期的計算
         * 要想表示某個日期還應(yīng)使用Date描述
         * Calendar是可以將其描述的時間轉(zhuǎn)化為Date的
         * 我們只需要調(diào)用其getTime()方法就可以獲取描述的日期的
         * Date對象了
         */
        Date now = calendar.getTime();//獲取日歷所描述的日期
        System.out.println(now);
        //通過日歷類計算時間
        /**
         * 為日歷類設(shè)置時間
         * 日歷類設(shè)置時間使用通用方法set
         * set(int field,int value)
         * fiele為時間分量:Calendar提供了相應(yīng)的常量值
         * value:對應(yīng)的值
         */
        //設(shè)置日歷表示2012年
        calendar.set(Calendar.YEAR,2012);
        /*
        * 設(shè)置日歷表示11月,月份的值是從0開始的替劈,
        * 所以0代表1月以此類推寄雀,也可以使用Calendar常量
        */
        calendar.set(Calendar.MONTH,11-1);//Tue Feb 27 20:37:20 CST 2018
        /**
         * 設(shè)置日歷表示15號
         * DAY_OF_MONTH 月里邊的天---號
         * DAY_OF_WEEK 星期里的天---星期幾
         * DAY_OF_YEAR 年里的天
         */
        calendar.set(Calendar.DAY_OF_MONTH,15);
        System.out.println(calendar.getTime());//Thu Nov 15 20:37:20 CST 2012
        /**
         * 想得知22天以后是哪天
         */
        calendar.add(Calendar.DAY_OF_YEAR,22);
        System.out.println(calendar.getTime());//Fri Dec 07 20:37:20 CST 2012
        /**
         * 想得知5天前是哪天
         */
        calendar.add(Calendar.DAY_OF_YEAR,-5);
        System.out.println(calendar.getTime());//Sun Dec 02 20:37:20 CST 2012
        /**
         * 想得知一個月后是哪天?
         */
        calendar.add(Calendar.MONTH,1);
        System.out.println(calendar.getTime());//Wed Jan 02 20:37:20 CST 2013
        /**
         * 想獲取當前日歷表示的日期中的某個時間單位
         * 可以使用get方法
         */
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        //month要處理,+1要加上括號陨献,否則變成字符串拼接了
        System.out.println(year+"年"+(month+1)+"月"+day+"日");
    }
}

SimpleDateFormat類

  • 該類的作用是可以很方便的在字符串和日期類之間相互裝行盒犹。
  • 我們可以將一個描述日期的字符串:2012-01-01轉(zhuǎn)換為一個Date對象。
  • 同樣眨业,我們可以將一個描述日期的Date對象轉(zhuǎn)換為2012-01-01這樣格式的字符串來表示

常用格式字符串

字符 含義 實例
y yyyy年——2013年急膀;yy——13年
M MM月——01月;M月——1月
d dd日——06日坛猪;d日——6日
E 星期 E——星期日(Sun)
a AM或PM標識 a——下午(PM)
H 小時(24小時制) 見下面實例
h 小時(12小時制) a h時——下午12時
m 分鐘 HH:mm:ss——12:46:33
s hh(a):mm:ss——12(下午):45:46
w 年中的周數(shù) 27
W 月份中的周數(shù) 2
D 年中的天數(shù) 189
F 月份中的星期 2
k 一天中的小時數(shù)(1-24) 24
K am/pm 中的小時數(shù)(0-11) 0
S 毫秒數(shù) 978
z 時區(qū)[General time zone] Pacific Standard Time; PST; GMT-08:00
Z 時區(qū)[RFC 822 time zone] -0800
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 日期轉(zhuǎn)換類SimpleDateFormat
 * 這里我們字符串與日期類間相互轉(zhuǎn)換是需要一些約束的
 * “2018-02-28”這個字符串如何轉(zhuǎn)換為Date對象脖阵?
 * SimpleDateFormat用來描述日期的格式
 * yyyy-MM-dd   2018-02-28
 * yy-MM-dd   18-02-28
 * yyyy-MM-dd hh:mm:ss   2018-02-28 09:20:53
 * yyyy年MM月dd日 hh時mm分ss秒   2018年02月28日 09時20分53秒
 */
public class SimpleDateFormatTest {
    public static void main(String[] args) throws ParseException {
        /**
         * 創(chuàng)建一個SimpleDateFormat并告知它要讀取的字符串的格式
         */
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        //創(chuàng)建一個日期格式的字符串
        String dateFormat = "2018-02-28";
        Date date = sdf.parse(dateFormat);//這里有個格式不匹配異常需要拋出或捕獲
        System.out.println(date);//Wed Feb 28 00:00:00 CST 2018
        /*
        * 反向操作,我們也可以將一個Date對象轉(zhuǎn)換為它所描述的日期
        * 的字符串墅茉。同樣命黔,轉(zhuǎn)換出來的字符串格式是
        * SimpleDateFormat創(chuàng)建的時候設(shè)置的格式
        */
        Date now = new Date();//創(chuàng)建用于描述當前系統(tǒng)時間的Date
        String nowStr = sdf.format(now);
        System.out.println(nowStr);//2018-02-28
        sdf=new SimpleDateFormat("yyyy年MM月dd日 hh時mm分ss秒");
        nowStr = sdf.format(now);
        System.out.println(nowStr);//2018年02月28日 10時47分11秒
        sdf=new SimpleDateFormat("yyyy/MM/dd a hh/mm/ss E");
        nowStr = sdf.format(now);
        System.out.println(nowStr);//2018/02/28 上午 10/47/11 星期三
         /**
         * 擴展
         */
        SimpleDateFormat sdf = (SimpleDateFormat) SimpleDateFormat.getInstance();
        sdf.applyPattern("yyyy-MM-dd'T'HH:mm:ss");//非pattern字符“T”要用‘’引入進來
        try {
            Date date = sdf.parse("2018-11-19T09:21:43:58+00"); //解析的字符串只要前面符合解析匹配規(guī)則,后面不匹配也可以解析
            System.out.println(date);//Mon Nov 19 09:21:43 CST 2018
            sdf.applyPattern("yyyy.MM.dd G 'at' HH:mm:ss '' z");//非pattern字符“'”只需'引入
            //時區(qū)
            date = sdf.parse("2001.07.04 AD at 12:08:56 ' PDT");
            System.out.println(date);//Thu Jul 05 03:08:56 CST 2001
            sdf.applyPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
            date = sdf.parse("2001-07-04T12:08:56.235-0700");
            System.out.println(date);//Thu Jul 05 03:08:56 CST 2001
        } catch (ParseException e) {
            e.printStackTrace();
        }

        Locale aDefault = Locale.getDefault();//當前系統(tǒng)所在地區(qū)
        System.out.println(aDefault.getCountry());//CN
        System.out.println(aDefault.getDisplayCountry());//中國
        System.out.println(aDefault.getLanguage());//zh
        System.out.println(aDefault.getDisplayLanguage());//中文
        System.out.println(aDefault.getDisplayName());//中文 (中國)
        TimeZone timeZone = TimeZone.getDefault();//當前系統(tǒng)所在時區(qū)
        System.out.println(timeZone.getDisplayName());//中國標準時間
        System.out.println(timeZone.getID());//Asia/Shanghai
        TimeZone mTimeZone = TimeZone.getTimeZone("America/Phoenix");
        System.out.println(mTimeZone.getDisplayName());//Mountain 標準時間
        mTimeZone = TimeZone.getTimeZone("Asia/Shanghai");
        System.out.println(mTimeZone.getDisplayName());//中國標準時間
        mTimeZone = TimeZone.getTimeZone("GMT+8:00");//東八區(qū)時區(qū)就斤、GMT-8:00(西八區(qū))
        System.out.println(mTimeZone.getDisplayName());//GMT+08:00

    }
}

工具類

public class DateUtil {
    /**
     * 按指定格式輸出當前時間
     *
     * @param pattern
     * @return
     */
    public static String getCurrentFormatDate(String pattern) {
        Date date = new Date();
        SimpleDateFormat sdf = (SimpleDateFormat) SimpleDateFormat.getInstance();
        sdf.applyPattern(pattern);
        return sdf.format(date);
    }

    /**
     * 按指定格式輸出時間戳時間
     *
     * @param timestamp
     * @param pattern
     * @return
     */
    public static String getTimeMillisFormatDate(long timestamp, String pattern) {
        Date date = new Date(timestamp);
        SimpleDateFormat sdf = (SimpleDateFormat) SimpleDateFormat.getInstance();
        sdf.applyPattern(pattern);
        return sdf.format(date);
    }

    /**
     * 時區(qū)轉(zhuǎn)換
     * @param date 要轉(zhuǎn)換的時間
     * @param oldPattern 待轉(zhuǎn)換時間的格式
     * @param oldLocale 待轉(zhuǎn)換時間所在地區(qū)
     * @param newPattern 轉(zhuǎn)換后時間格式
     * @param newTimeZone 需轉(zhuǎn)換的地方時區(qū)
     * @return
     * @throws ParseException
     */
    public static String zoneTimeTransform(String date, String oldPattern, Locale oldLocale, String newPattern, TimeZone newTimeZone) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(oldPattern, oldLocale);
        Date oldDate = sdf.parse(date);
        sdf.applyPattern(newPattern);
        sdf.setTimeZone(newTimeZone);
        return sdf.format(oldDate);
    }
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悍募,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子洋机,更是在濱河造成了極大的恐慌坠宴,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绷旗,死亡現(xiàn)場離奇詭異喜鼓,居然都是意外死亡,警方通過查閱死者的電腦和手機衔肢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門庄岖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人角骤,你說我怎么就攤上這事隅忿。” “怎么了邦尊?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵背桐,是天一觀的道長。 經(jīng)常有香客問我蝉揍,道長链峭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任疑苫,我火速辦了婚禮熏版,結(jié)果婚禮上纷责,老公的妹妹穿的比我還像新娘。我一直安慰自己撼短,他們只是感情好再膳,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著曲横,像睡著了一般喂柒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上禾嫉,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天灾杰,我揣著相機與錄音,去河邊找鬼熙参。 笑死艳吠,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的孽椰。 我是一名探鬼主播昭娩,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼黍匾!你這毒婦竟也來了栏渺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤锐涯,失蹤者是張志新(化名)和其女友劉穎磕诊,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纹腌,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡霎终,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了升薯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片神僵。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖覆劈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沛励,我是刑警寧澤责语,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站目派,受9級特大地震影響坤候,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜企蹭,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一白筹、第九天 我趴在偏房一處隱蔽的房頂上張望智末。 院中可真熱鬧,春花似錦徒河、人聲如沸系馆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽由蘑。三九已至,卻和暖如春代兵,著一層夾襖步出監(jiān)牢的瞬間尼酿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工植影, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留裳擎,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓思币,卻偏偏與公主長得像鹿响,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子支救,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 愛情是一種很奇妙的感覺各墨。好的愛情指孤,讓你看到全世界;不好的愛情贬堵,讓你感覺他就是你的全世界恃轩。 詹姆斯歷時幾個月終于找到...
    五月兒要努力閱讀 160評論 0 1
  • 意大利面積最小人口最少的產(chǎn)區(qū),有一些本土品種黎做,公元前400年開始葡萄種植叉跛。山區(qū)地形,北邊是瑞士蒸殿,西邊是法國筷厘,皮爾蒙...
    美酒星球閱讀 268評論 0 0
  • 2016年10月23日11人屠邊局,預女獵白板子宏所,3民酥艳。 第一天 天黑 狼隊睜眼。3爬骤、5充石、6、11四狼霞玄,我5號骤铃。 ...
    喃以之語閱讀 4,767評論 8 3