java日期和時間API

Java API中關(guān)于日期和時間,有三個主要的類锹引。

? Date:表示時刻筑煮,即絕對時間,與年月日無關(guān)粤蝎。

? Calendar:表示年歷,Calendar是一個抽象類袋马,其中表示公歷的子類是Gregorian-Calendar初澎。

? DateFormat:表示格式化,能夠?qū)⑷掌诤蜁r間與字符串進行相互轉(zhuǎn)換虑凛,DateFormat也是一個抽象類碑宴,其中最常用的子類是SimpleDateFormat。

還有兩個相關(guān)的類:

? TimeZone:表示時區(qū)桑谍。

? Locale:表示國家(或地區(qū))和語言延柠。


Date類

Date中的大部分方法都已經(jīng)過時了,其中沒有過時的主要方法有下面這些:

public long getTime() //返回毫秒數(shù)

public boolean equals(Object obj) //主要就是比較內(nèi)部的毫秒數(shù)是否相同? ? ? ? //與其他Date進行比較锣披,如果當(dāng)前Date的毫秒數(shù)小于參數(shù)中的返回-1贞间,相同返回0,否則返回1

public int compareTo(Date anotherDate)

public boolean before(Date when) //判斷是否在給定日期之前

public boolean after(Date when) //判斷是否在給定日期之后

public int hashCode() //哈希值算法與Long類似


TimeZone類

TimeZone表示時區(qū)雹仿,是一個抽象類增热,有靜態(tài)方法可以獲取實例,過去當(dāng)前的默認時區(qū):

TimeZone.getDefault();


可以在啟動java時修改時區(qū)

java -Duser.timezone=Asia/Shanghai xxxx


TimeZone也有靜態(tài)方法胧辽,可以獲得任意給定時區(qū)的實例峻仇。比如,獲取美國東部時區(qū):

? ? ? ? TimeZone tz = TimeZone.getTimeZone("US/Eastern");

ID除了可以是名稱外邑商,還可以是GMT形式表示的時區(qū)摄咆,如:

? ? ? ? TimeZone tz = TimeZone.getTimeZone("GMT+08:00");


Locale

表示國家凡蚜,地區(qū)和語言

Locale類中定義了一些靜態(tài)變量,表示常見的Locale吭从,比如:

? Locale.US:表示美國英語朝蜘。

? Locale.ENGLISH:表示所有英語。

? Locale.TAIWAN:表示中國臺灣地區(qū)所用的中文影锈。

? Locale.CHINESE:表示所有中文芹务。

? Locale.SIMPLIFIED_CHINESE:表示中國內(nèi)地所用的中文。

與TimeZone類似鸭廷,Locale也有靜態(tài)方法獲取默認值枣抱,如:

? ? ? ? Locale locale = Locale.getDefault();? ? ? ? System.out.println(locale.toString()); //zh_CN


Calendar

Calendar類是日期和時間操作中的主要類,它表示與TimeZone和Locale相關(guān)的日歷信息辆床,可以進行各種相關(guān)的運算佳晶。

Calendar中的一些靜態(tài)變量

? Calendar.YEAR:表示年。

? Calendar.MONTH:表示月讼载,1月是0, Calendar同樣定義了表示各個月份的靜態(tài)變量轿秧,如Calendar.JULY表示7月荣赶。

? Calendar.DAY_OF_MONTH:表示日扯饶,每月的第一天是1寄雀。

? Calendar.HOUR_OF_DAY:表示小時毁兆,為0~23侣滩。

? Calendar.MINUTE:表示分鐘绒瘦,為0~59膊毁。

? Calendar.SECOND:表示秒精堕,為0~59凸克。

? Calendar.MILLISECOND:表示毫秒议蟆,為0~999。

? Calendar.DAY_OF_WEEK:表示星期幾萎战,周日是1咐容,周一是2,周六是7, Calenar同樣定義了表示各個星期的靜態(tài)變量蚂维,如Calendar.SUNDAY表示周日戳粒。

與new Date()類似,新創(chuàng)建的Calendar對象表示的也是當(dāng)前時間虫啥,與Date不同的是享郊, Calendar對象可以方便地獲取年月日等日歷信息。來看代碼孝鹊,輸出當(dāng)前時間的各種信息:

? ? ? ? Calendar calendar = Calendar.getInstance();? ? ? ? System.out.println("year: "+calendar.get(Calendar.YEAR));? ? ? ? System.out.println("month: "+calendar.get(Calendar.MONTH));? ? ? ? System.out.println("day: "+calendar.get(Calendar.DAY_OF_MONTH));? ? ? ? System.out.println("hour: "+calendar.get(Calendar.HOUR_OF_DAY));? ? ? ? System.out.println("minute: "+calendar.get(Calendar.MINUTE));? ? ? ? System.out.println("second: "+calendar.get(Calendar.SECOND));? ? ? ? System.out.println("millisecond: " +calendar.get(Calendar.MILLISECOND));? ? ? ? System.out.println("day_of_week: " + calendar.get(Calendar.DAY_OF_WEEK));

具體輸出與執(zhí)行時的時間和默認的TimeZone以及Locale有關(guān)炊琉,比如,在筆者的計算機中的一次輸出為:

year: 2016? ? ? ?

month: 7? ? ? ?

day: 14? ? ? ?

hour: 13? ? ? ?

minute: 55? ? ? ?

second: 51? ? ? ?

millisecond: 564? ? ? ?

day_of_week: 2


Calendar支持根據(jù)Date或毫秒數(shù)設(shè)置時間:

? ? ? ? public final void setTime(Date date)? ? ? ? public void setTimeInMillis(long millis)

也支持根據(jù)年月日等日歷字段設(shè)置時間,比如:

? ? ? ? public final void set(int year, int month, int date)? ? ? ? public final void set(int year, int month, int date,? ? ? ? ? int hourOfDay, int minute, int second)? ? ? ? public void set(int field, int value)

除了直接設(shè)置苔咪,Calendar支持根據(jù)字段增加和減少時間:

? ? ? ? public void add(int field, int amount)

amount為正數(shù)表示增加锰悼,負數(shù)表示減少。

比如团赏,如果想設(shè)置Calendar為第二天的下午2點15箕般,代碼可以為:

? ? ? ? Calendar calendar = Calendar.getInstance();? ? ? ? calendar.add(Calendar.DAY_OF_MONTH, 1);? ? ? ? calendar.set(Calendar.HOUR_OF_DAY, 14);? ? ? ? calendar.set(Calendar.MINUTE, 15);? ? ? ? calendar.set(Calendar.SECOND, 0);? ? ? ? calendar.set(Calendar.MILLISECOND, 0);


Calendar可以方便地轉(zhuǎn)換為Date或毫秒數(shù),方法是:

? ? ? ? public final Date getTime()? ? ? ? public long getTimeInMillis()


Dateformat

DateFormat類主要在Date和字符串表示之間進行相互轉(zhuǎn)換舔清,它有兩個主要的方法:

public final String format(Date date)? ? ? ? public Date parse(String source)

format將Date轉(zhuǎn)換為字符串丝里,parse將字符串轉(zhuǎn)換為Date。


SimpleDateFormat是DateFormat的子類体谒,相比DateFormat杯聚,它的一個主要不同是,它可以接受一個自定義的模式(pattern)作為參數(shù)抒痒,這個模式規(guī)定了Date的字符串形式幌绍。先看個例子:

? ? ? ? Calendar calendar = Calendar.getInstance();? ? ? ? //2016-08-15 14:15:20? ? ? ? calendar.set(2016, 07, 15, 14, 15, 20);? ? ? ? SimpleDateFormat sdf = new SimpleDateFormat(? ? ? ? ? ? "yyyy年MM月dd日 E HH時mm分ss秒");? ? ? ? System.out.println(sdf.format(calendar.getTime()));

輸出為:

? ? ? ? 2016年08月15日 星期一 14時15分20秒

? yyyy:表示4位的年。

? MM:表示月故响,用兩位數(shù)表示傀广。

? dd:表示日,用兩位數(shù)表示彩届。

? HH:表示24小時制的小時數(shù)伪冰,用兩位數(shù)表示。

? mm:表示分鐘樟蠕,用兩位數(shù)表示贮聂。

? ss:表示秒,用兩位數(shù)表示坯墨。

? E:表示星期幾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末病往,一起剝皮案震驚了整個濱河市捣染,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌停巷,老刑警劉巖耍攘,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異畔勤,居然都是意外死亡蕾各,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門庆揪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來式曲,“玉大人,你說我怎么就攤上這事×咝撸” “怎么了兰伤?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長钧排。 經(jīng)常有香客問我敦腔,道長,這世上最難降的妖魔是什么恨溜? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任符衔,我火速辦了婚禮,結(jié)果婚禮上糟袁,老公的妹妹穿的比我還像新娘判族。我一直安慰自己,他們只是感情好系吭,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布五嫂。 她就那樣靜靜地躺著,像睡著了一般肯尺。 火紅的嫁衣襯著肌膚如雪沃缘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天则吟,我揣著相機與錄音槐臀,去河邊找鬼。 笑死氓仲,一個胖子當(dāng)著我的面吹牛水慨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播敬扛,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼晰洒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了啥箭?” 一聲冷哼從身側(cè)響起谍珊,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎急侥,沒想到半個月后砌滞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡坏怪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年贝润,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铝宵。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡打掘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情胧卤,我是刑警寧澤唯绍,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站枝誊,受9級特大地震影響况芒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叶撒,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一绝骚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧祠够,春花似錦压汪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至落君,卻和暖如春穿香,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绎速。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工皮获, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纹冤。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓洒宝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親萌京。 傳聞我的和親對象是個殘疾皇子雁歌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

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