java 中的時(shí)間操作不外乎這四種情況:
1 、獲取當(dāng)前時(shí)間
2 、獲取某個(gè)時(shí)間的某種格式
3 、設(shè)置時(shí)間
4 、時(shí)間的運(yùn)算
好,下面就針對(duì)這三種情況,一個(gè)一個(gè)搞定。
?
一、獲取當(dāng)前時(shí)間
?
有兩種方式可以獲得,第一種,使用 Date 類。
j2SE 的包里有兩個(gè) Date 類,一個(gè)是 java.sql.Date, 一個(gè)是 java.util.Date
這里,要使用 java.util.Date 。獲取當(dāng)前時(shí)間的代碼如下
Date date = new Date();
date.getTime() ;
還有一種方式,使用 System.currentTimeMillis() ;
?
這兩種方式獲得的結(jié)果是一樣的,都是得到一個(gè)當(dāng)前的時(shí)間的 long 型的時(shí)間的毫秒值,這個(gè)值實(shí)際上是當(dāng)前時(shí)間值與 1970 年一月一號(hào)零時(shí)零分零秒相差的毫秒數(shù)。
當(dāng)前的時(shí)間得到了,但實(shí)際的應(yīng)用中最后往往不是要用這個(gè) long 型的東西,用戶希望得到的往往是一個(gè)時(shí)間的字符串,比如“ 2006 年 6 月 18 號(hào)”,或“ 2006-06-18 ”,老外可能希望得到的是“ 06-18-2006 ”,諸如此類等等。這就是下一個(gè)要解決的問題
?
二、獲取某個(gè)時(shí)間的某種格式
?
獲取時(shí)間的格式,需要用到一個(gè)專門用于時(shí)間格式的類 java.text.SimpleDateFormat 。
首先,定義一個(gè) SimpleDateFormat 變量
SimpleDateFormat sdf = new SimpleDateFormat("",Locale.SIMPLIFIED_CHINESE);
這個(gè)構(gòu)造函數(shù)的定義如下:
SimpleDateFormat(String ? pattern, Locale ? locale)
第一個(gè)參數(shù) pattern ,我們后面再解釋,這里我們使用一個(gè) "", 第二個(gè)參數(shù),是用來設(shè)置時(shí)區(qū)的,這里用到了 java.util.Locale 這個(gè)類,這個(gè)類了面定義了很多靜態(tài)變量,直接拿過來用就 OK ,我們把時(shí)區(qū)設(shè)置為 Locale.SIMPLIFIED_CHINESE ,只看名字,這個(gè)靜態(tài)變量的意義已經(jīng)很清楚了。
?
接下來我們使用這個(gè) SimpleDateFormat 把當(dāng)前時(shí)間格式化為一個(gè)如下格式的時(shí)間字符串“ XXXX 年 XX 月 XX 日 _XX 時(shí) XX 分 XX 秒”,代碼:
sdf.applyPattern("yyyy年MM月dd日_HH時(shí)mm分ss秒");
String timeStr = sdf.format(new Date());
?
獲取時(shí)間格式的函數(shù)是 format ,這個(gè)函數(shù)的參數(shù)是 java.util.Date 對(duì)象,這個(gè)沒有什么花頭。
要說明一下的是這個(gè) pattern ,所謂的模式。這里, yyyy,MM,dd 等,這就是模式。
我們可以在 SimpleDateFormat 的構(gòu)造函數(shù)中指定模式,比如
SimpleDateFormat sdf = new SimpleDateFormat(" yyyy-MM-dd ",Locale.SIMPLIFIED_CHINESE);
也可以獲取時(shí)間格式的時(shí)候使用applyPattern函數(shù)臨時(shí)指定,上面的例子就是這樣。
什么字符代表什么,這是 j2se 約定好的,設(shè)置模式的時(shí)候,我們可以使用約定好的字符加上任何我們想要的字符串。
j2se 對(duì)字符所代表的模式的約定列表如下:
?
?
Letter
Date or Time Component
Presentation
G
Era designator
Text
y
Year
Year
M
Month in year
Month
w
Week in year
Number
W
Week in month
Number
D
Day in year
Number
d
Day in month
Number
F
Day of week in month
Number
E
Day in week
Text
a
Am/pm marker
Text?
H
Hour in day (0-23)
Number
k
Hour in day (1-24)
Number
K
Hour in am/pm (0-11)?
Number
h??
Hour in am/pm (1-12)?
Number
m??
Minute in hour?
Number
s??
Second in minute?
Number
S??
Millisecond?
Number??
z??
Time zone??
General time zone?
Z??
Time zone?
RFC 822 time zone