JAVA(13)時間日期處理

時間日期

Date 類

  • Date 類表示系統(tǒng)特定的時間戳缀旁,可以精確到毫秒。
  • Date 對象表示時間的默認(rèn)順序是星期试疙、月诵棵、日、小時祝旷、分履澳、秒、年怀跛。
  • Date類有兩種構(gòu)造方法
    1距贷、 Date(): 此種形式表示分配 Date 對象并初始化此對象,以表示分配它的時間(精確到毫秒)吻谋,使用該構(gòu)造方法創(chuàng)建的對象可以獲取本地的當(dāng)前時間忠蝗。
    2、 Date(long date): 此種形式表示從 GMT 時間(格林尼治時間)1970 年 1 月 1 日 0 時 0 分 0 秒開始經(jīng)過參數(shù) date 指定的毫秒數(shù)漓拾。
Date date1=new Date();    //調(diào)用無參數(shù)構(gòu)造函數(shù)
System.out.println(date1.toString());    //輸出:Wed May 18 21:24:40 CST 2016
Date date2=new Date(60000);    //調(diào)用含有一個long類型參數(shù)的構(gòu)造函數(shù)
System.out.println(date2);    //輸出:Thu Jan 0108:01:00 CST 1970
  • Date 類的無參數(shù)構(gòu)造方法獲取的是系統(tǒng)當(dāng)前的時間阁最,顯示的順序為星期、月骇两、日速种、小時、分低千、秒配阵、年。

  • Date 類帶 long 類型參數(shù)的構(gòu)造方法獲取的是距離 GMT 指定毫秒數(shù)的時間示血,60000 毫秒是一分鐘棋傍,而 GMT(格林尼治標(biāo)準(zhǔn)時間)與 CST(中央標(biāo)準(zhǔn)時間)相差 8 小時,也就是說 1970 年 1 月 1 日 00:00:00 GMT 與 1970 年 1 月 1 日 08:00:00 CST 表示的是同一時間难审。 因此距離 1970 年 1 月 1 日 00:00:00 CST 一分鐘的時間為 1970 年 1 月 1 日 00:01:00 CST瘫拣,即使用 Date 對象表示為 Thu Jan 01 08:01:00 CST 1970。

表1 Date類中的常用方法

方法 描述
boolean after(Date when) 判斷此日期是否在指定日期之后
boolean before(Date when) 判斷此日期是否在指定日期之前
int compareTo(Date anotherDate) 比較兩個日期的順序
boolean equals(Object obj) 比較兩個日期的相等性
long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以來告喊,此 Date 對象表示的毫秒數(shù)
String toString() 把此 Date 對象轉(zhuǎn)換為以下形式的 String: dow mon dd hh:mm:ss zzz yyyy麸拄。其中 dow 是一周中的某一天(Sun、Mon葱绒、Tue感帅、Wed、Thu地淀、Fri 及 Sat)

Calendar 類

  • Calendar 類是一個抽象類失球,它為特定瞬間與 YEAR、MONTH、DAY_OF—MONTH实苞、HOUR 等日歷字段之間的轉(zhuǎn)換提供了一些方法豺撑,并為操作日歷字段(如獲得下星期的日期) 提供了一些方法。
  • 創(chuàng)建 Calendar 對象不能使用 new 關(guān)鍵字黔牵,因為 Calendar 類是一個抽象類聪轿,但是它提供了一個 getInstance() 方法來獲得 Calendar類的對象。getInstance() 方法返回一個 Calendar 對象猾浦,其日歷字段已由當(dāng)前日期和時間初始化陆错。
  • Calendar c = Calendar.getInstance();
方法 描述
void add(int field, int amount) 根據(jù)日歷的規(guī)則,為給定的日歷字段 field 添加或減去指定的時間量 amount
boolean after(Object when) 判斷此 Calendar 表示的時間是否在指定時間 when 之后金赦,并返回判斷結(jié)果
boolean before(Object when) 判斷此 Calendar 表示的時間是否在指定時間 when 之前音瓷,并返回判斷結(jié)果
void clear() 清空 Calendar 中的日期時間值
int compareTo(Calendar anotherCalendar) 比較兩個 Calendar 對象表示的時間值(從格林威治時間 1970 年 01 月 01 日00 時 00 分 00 秒至現(xiàn)在的毫秒偏移量),大則返回 1夹抗,小則返回 -1绳慎,相等返回 0
int get(int field) 返回指定日歷字段的值
int getActualMaximum(int field) 返回指定日歷字段可能擁有的最大值
int getActualMinimum(int field) 返回指定日歷字段可能擁有的最小值
int getFirstDayOfWeek() 獲取一星期的第一天。根據(jù)不同的國家地區(qū)漠烧,返回不同的值
static Calendar getInstance() 使用默認(rèn)時區(qū)和語言壞境獲得一個日歷
static Calendar getInstance(TimeZone zone) 使用指定時區(qū)和默認(rèn)語言環(huán)境獲得一個日歷
static Calendar getInstance(TimeZone zone,Locale aLocale) 使用指定時區(qū)和語言環(huán)境獲得一個日歷
Date getTime() 返回一個表示此 Calendar 時間值(從格林威治時間 1970 年 01 月 01 日 00 時 00 分 00 秒至現(xiàn)在的毫秒偏移量)的 Date 對象
long getTimeInMillis() 返回此 Calendar 的時間值杏愤,以毫秒為單位
void set(int field, int value) 為指定的日歷字段設(shè)置給定值
void set(int year, int month, int date) 設(shè)置日歷字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
void set(int year, int month, int date, int hourOfDay, int minute, int second) 設(shè)置字段 YEAR已脓、MONTH珊楼、DAY_OF_MONTH、HOUR摆舟、 MINUTE 和 SECOND 的值
void setFirstDayOfWeek(int value) 設(shè)置一星期的第一天是哪一天
void setTimeInMillis(long millis) 用給定的 long 值設(shè)置此 Calendar 的當(dāng)前時間值
  • Calendar 對象可以調(diào)用 set() 方法將日歷翻到任何一個時間亥曹,當(dāng)參數(shù) year 取負(fù)數(shù)時表示公元前邓了。Calendar 對象調(diào)用 get() 方法可以獲取有關(guān)年恨诱、月、日等時間信息骗炉,參數(shù) field 的有效值由 Calendar 靜態(tài)常量指定照宝。

Calendar 類中定義了許多常量,分別表示不同的意義句葵。
Calendar.YEAR:年份厕鹃。
Calendar.MONTH:月份。
Calendar.DATE:日期乍丈。
Calendar.DAY_OF_MONTH:日期剂碴,和上面的字段意義完全相同。
Calendar.HOUR:12小時制的小時轻专。
Calendar.HOUR_OF_DAY:24 小時制的小時忆矛。
Calendar.MINUTE:分鐘。
Calendar.SECOND:秒。
Calendar.DAY_OF_WEEK:星期幾催训。

Calendar calendar=Caiendar.getlnstance();    //如果不設(shè)置時間洽议,則默認(rèn)為當(dāng)前時間
caiendar.setTimefnew Date());    //將系統(tǒng)當(dāng)前時間賦值給 Calendar 對象
System.out.println("現(xiàn)在時刻:"+calendar.getTime());    //獲取當(dāng)前時間
int year=calendar.get(Calendar.YEAR);    //獲取當(dāng)前年份
System.out.println("現(xiàn)在是"+year+"年");
int month=calendar.get(Calendar.MONTH)+1;    //獲取當(dāng)前月份(月份從 0 開始,所以加 1)
System.out.print(month+"月");
int day=calendar.get(Calendar.DATE);    //獲取日
System.out.print(day+"日");
int week=calendar.get(Calendar.DAY_OF_WEEK)-1;    //獲取今天星期幾(以星期日為第一天)
System.out.print("星期"+week);
int hour=calendar.get(Calendar.HOUR_OF_DAY);    //獲取當(dāng)前小時數(shù)(24 小時制)
System.out.print(hour+"時");
int minute=calendar.get(Calendar.MINUTE);    //獲取當(dāng)前分鐘
System.out.print(minute+"分");
int second=calendar.get(Calendar.SECOND);    //獲取當(dāng)前秒數(shù)
System.out.print(second+"秒");
int millisecond=calendar.get(Calendar.MILLISECOND);    //獲取毫秒數(shù)
System.out.print(millisecond+"毫秒");
int dayOfMonth=calendar.get(Calendar.DAY_OF_MONTH);    //獲取今天是本月第幾天
System.out.println("今天是本月的第 "+dayOfMonth+" 天");
int dayOfWeekInMonth=calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);    //獲取今天是本月第幾周
System.out.println("今天是本月第 "+dayOfWeekInMonth+" 周");
int many=calendar.get(Calendar.DAY_OF_YEAR);    //獲取今天是今年第幾天
System.out.println("今天是今年第 "+many+" 天");
Calendar c=Calendar.getInstance();
c.set(2012/8/8);    //設(shè)置年月日漫拭,時分秒將默認(rèn)采用當(dāng)前值
System.out.println("設(shè)置日期為 2012-8-8 后的時間:"+c.getTime());    //輸出時間

DateFormat 類

  • DateFormat 是日期/時間格式化子類的抽象類亚兄,它以與語言無關(guān)的方式格式化并解析日期或時間。日期/時間格式化子類(如 SimpleDateFormat)允許進(jìn)行格式化(也就是日期→文本)采驻、解析(文本→日期)和標(biāo)準(zhǔn)化日期审胚。
  • 在創(chuàng)建 DateFormat 對象時不能使用 new 關(guān)鍵字,而應(yīng)該使用 DateFormat 類中的靜態(tài)方法 getDateInstance()礼旅,示例代碼如下
  • DateFormat df = DateFormat.getDateInstance();
//獲取不同格式化風(fēng)格和中國環(huán)境的日期
DateFormat df1=DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA);
DateFormat df2=DateFormat.getDateInstance(DateFormat.FULL,Locale.CHINA);
DateFormat df3=DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA);
DateFormat df4=DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA);
//獲取不同格式化風(fēng)格和中國環(huán)境的時間
DateFormat df5=DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA);
DateFormat df6=DateFormat.getTimeInstance(DateFormat.FULL,Locale.CHINA);
DateFormat df7=DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA);
DateFormat df8=DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA);
//將不同格式化風(fēng)格的日期格式化為日期字符串
String date1=df1.format(new Date());
String date2=df2.format(new Date());
String date3=df3.format(new Date());
String date4=df4.format(new Date());
//將不同格式化風(fēng)格的時間格式化為時間字符串
String time1=df5.format(new Date());
String time2=df6.format(new Date());
String time3=df7.format(new Date());
String time4=df8.format(new Date());
//輸出日期
System.out.println("SHORT:"+date1+" "+time1);
System.out.println("FULL:"+date2+" "+time2);
System.out.println("MEDIUM:"+date3+" "+time3);
System.out.println("LONG:"+date4+" "+time4);

SimpleDateFormat 類

  • 如果使用 DateFormat 類格式化日期/時間并不能滿足要求菲盾,那么就需要使用 DateFormat 類的子類——SimpleDateFormat。

  • SimpleDateFormat 是一個以與語言環(huán)境有關(guān)的方式來格式化和解析日期的具體類各淀,它允許進(jìn)行格式化(日期→文本)懒鉴、解析(文本→日期)和規(guī)范化。SimpleDateFormat 使得可以選擇任何用戶定義的日期/時間格式的模式碎浇。

  • SimpleDateFormat 類主要有如下 3 種構(gòu)造方法临谱。
    1、 SimpleDateFormat():用默認(rèn)的格式和默認(rèn)的語言環(huán)境構(gòu)造 SimpleDateFormat奴璃。
    2悉默、 SimpleDateFormat(String pattern):用指定的格式和默認(rèn)的語言環(huán)境構(gòu)造 SimpleDateF ormat。
    3苟穆、 SimpleDateFormat(String pattern,Locale locale):用指定的格式和指定的語言環(huán)境構(gòu)造 SimpleDateF ormat抄课。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雳旅,隨后出現(xiàn)的幾起案子跟磨,更是在濱河造成了極大的恐慌,老刑警劉巖攒盈,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抵拘,死亡現(xiàn)場離奇詭異,居然都是意外死亡型豁,警方通過查閱死者的電腦和手機(jī)僵蛛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迎变,“玉大人充尉,你說我怎么就攤上這事∫滦危” “怎么了驼侠?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我泪电,道長般妙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任相速,我火速辦了婚禮碟渺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘突诬。我一直安慰自己苫拍,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布旺隙。 她就那樣靜靜地躺著绒极,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蔬捷。 梳的紋絲不亂的頭發(fā)上垄提,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音周拐,去河邊找鬼铡俐。 笑死,一個胖子當(dāng)著我的面吹牛妥粟,可吹牛的內(nèi)容都是我干的审丘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼勾给,長吁一口氣:“原來是場噩夢啊……” “哼滩报!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起播急,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤脓钾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后旅择,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惭笑,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡侣姆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年生真,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捺宗。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡柱蟀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚜厉,到底是詐尸還是另有隱情长已,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站术瓮,受9級特大地震影響康聂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜胞四,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一恬汁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辜伟,春花似錦氓侧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旱捧,卻和暖如春独郎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枚赡。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工囚聚, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人标锄。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓顽铸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親料皇。 傳聞我的和親對象是個殘疾皇子谓松,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

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

  • 自從JDK 1.0開始,Java就提供了Date來處理時間和日期践剂,作為老古董自然有很多東西是過時的鬼譬。然后出現(xiàn)了Ca...
    湫水長天閱讀 2,079評論 0 16
  • 1、工具類 Java中提供了大量的類和接口完成特定的功能逊脯。每個類都會有自己的屬性和行為(功能)优质。但是這些功能還是不...
    Villain丶Cc閱讀 1,688評論 0 1
  • 一、Java中的日期概述 日期在Java中是一塊非常復(fù)雜的內(nèi)容军洼,對于一個日期在不同的語言國別環(huán)境中巩螃,日期的國際化,...
    Liam大大閱讀 7,420評論 0 5
  • 1匕争,今天我很豐盛避乏。上午和最親愛的短暫的會面,又給我了很多的動力和信心甘桑,好的關(guān)系就像這樣拍皮,不斷地滋養(yǎng)著彼此歹叮,一起成長...
    daodaobai閱讀 211評論 0 1
  • 高考過后咆耿,有很多同學(xué)因發(fā)揮不正常,達(dá)不到預(yù)期期望的成績爹橱,會感覺痛苦票灰,拒絕向外透露成績,這是源于一種羞恥感或內(nèi)疚感的...
    方圓fg閱讀 606評論 2 7