今天我們來深入探討一下Java中的Calendar的工具類,總共會分成兩部分由深到淺講解。這篇就講解Calendar的基礎用法,看它到底能做到什么事情,下一篇我們將擴展的講解我們平時開發遇到的問題和一些通過Calendar來計算的方法。比如比較兩個日期是否再同一年等問題。
首先
我們要知道程序中存儲時間的值。在生活中我們表達時間是幾年幾月幾號幾時幾分等,可以說表達方式有很多。代碼中保存日期的確只有一種,就是我們平時說的毫秒數。從1970年1月1號0時0分0秒最為計算開始。毫秒數為0,就是這個1970年1月1號0時0分0秒這個時間。實際開發中還會遇到這個問題,我如果時區,地區更換了,那同一個Calendar返回毫秒數還是一樣嗎?答案是一樣的,但是Calendar的get方法就不一樣了。
開始
Java中,Calendar是一個抽象類。沒有具體實現。都由他子類實現的,Calendar.getInstance()方法會自己去判斷然后去創建相應的Calendar子類。用的最多的還是GregorianCalendar公歷這個類。
Calendar常用方法及常量說明:
1.getInstance() 獲取Calendar子類的實例。其子類可以直接使用new,例如new GregorianCalendar。
2. setTimeInMillis(),setTime() ?都是給Calendar對象們設置時間。一般通過Calendar.getInstance()方法獲得的Calendar對象都已經默認賦值為了系統當前的毫秒數。
3.setTimeZone()? 設置時區,格式如北京時間"GMT +8:00".
4.set(int field, int value) 可以單獨設置日期的某個值,如設置年,設置月等。
calendar.set(Calendar.YEAR,2020);
calendar.set(Calendar.HOUR_OF_DAY,23);
5.add(int field, int value) 日期的加減計算??梢约訙p年,加減月
calendar.add(Calendar.YEAR,2020);
calendar.add(Calendar.HOUR_OF_DAY,23);
6.get(int field, int value) 獲得日期對應的值,比如得到年,得到月的值。這里注意一下。GregorianCalendar類返回的月的值是0-11的,返回的星期幾是1表示星期天。7表示星期六。
7.常用常量
ERA(0) :網上資料翻譯(紀元/世紀),不是很清楚啥意思,有知道的可以告知。
YEAR(1) : 表示年
MONTH(2): 表示月
WEEK_OF_YEAR(3):表示一年中的第幾周,一年一共有52周
WEEK_OF_MONTH(4):表示這個月的第幾個星期
DATE:表示日
DAY_OF_MONTH:表示日
DAY_OF_YEAR:表示當天在這一年里是第幾天?
DAY_OF_WEEK:表示星期幾
DAY_OF_WEEK_IN_MONTH:表示當天在該月的第幾個星期
AM_PM:表示上午還是下午
HOUR:表示小時,12小時制,
HOUR_OF_DAY:表示小時,24小時制
MINUTE:表示分鐘
SECOND:表示秒
MILLISECOND:表示微秒
以上就是Calendar的常用方法。還有些不怎么常用的方法,以后在說。
雖然Calendar已經很方便了,但是平時開發中還是有些不方便。比如快速轉換指定時間到指定格式,比如我要顯示xxxx年xx月這樣的格式,自己做的話只能Calendar.get()方法去一個個取,好啦,說了這莫多,接下來就簡單介紹一下SimpleDateFormat類。
SimpleDateFormat 常用方法:
format() : 將指定的日期轉換成對應的格式。得到一個轉換之后字符串。
parse() : 傳入一個字符串寫好的日期(如2017年03月01),就會得到一個日期對象Date。
SimpleDateFormat 常用關鍵字:
G : 表示年代
y/Y : 表示年
M : 表示月
d : 表示日
D : 表示一年的第幾天
E : 表示星期幾
w : 表示一年的第幾個星期
W : 一月中第幾個星期
F : ?一月中第幾個星期幾
h : 表示小時,一天中(12小時制 1-12)
H : 表示小時,一天中(24小時制 0-23)
k : 表示小時,一天中(12小時制 0-23)
K : 表示小時,一天中(12小時制 0-11)
m : 表示分鐘
s : 表示秒
S : 表示毫秒
a : 表示上午,下午
z : 時區
好了今天就介紹到這里,這篇是我第一在簡書上寫寫文章,個人感覺,寫代碼,技術的文章還是有點不習慣,寫的不對的地方還請大家指點指點。