java
中的時間操作不外乎這四種情況:
1
、獲取當前時間
2
、獲取某個時間的某種格式
3
、設置時間
4
、時間的運算
好,下面就針對這三種情況,一個一個搞定。
?
一、獲取當前時間
?
有兩種方式可以獲得,第一種,使用
Date
類。
j2SE
的包里有兩個
Date
類,一個是
java.sql.Date,
一個是
java.util.Date
這里,要使用
java.util.Date
。獲取當前時間的代碼如下
Date date = new Date();
date.getTime()
;
還有一種方式,使用
System.currentTimeMillis()
;
?
這兩種方式獲得的結果是一樣的,都是得到一個當前的時間的
long
型的時間的毫秒值,這個值實際上是當前時間值與
1970
年一月一號零時零分零秒相差的毫秒數。
當前的時間得到了,但實際的應用中最后往往不是要用這個
long
型的東西,用戶希望得到的往往是一個時間的字符串,比如“
2006
年
6
月
18
號”,或“
2006-06-18
”,老外可能希望得到的是“
06-18-2006
”,諸如此類等等。這就是下一個要解決的問題
?
二、獲取某個時間的某種格式
?
獲取時間的格式,需要用到一個專門用于時間格式的類
java.text.SimpleDateFormat
。
首先,定義一個
SimpleDateFormat
變量
SimpleDateFormat sdf = new SimpleDateFormat("",Locale.SIMPLIFIED_CHINESE);
這個構造函數的定義如下:
SimpleDateFormat(String
?
pattern, Locale
?
locale)
第一個參數
pattern
,我們后面再解釋,這里我們使用一個
"",
第二個參數,是用來設置時區的,這里用到了
java.util.Locale
這個類,這個類了面定義了很多靜態變量,直接拿過來用就
OK
,我們把時區設置為
Locale.SIMPLIFIED_CHINESE
,只看名字,這個靜態變量的意義已經很清楚了。
?
接下來我們使用這個
SimpleDateFormat
把當前時間格式化為一個如下格式的時間字符串“
XXXX
年
XX
月
XX
日
_XX
時
XX
分
XX
秒”,代碼:
sdf.applyPattern("yyyy年MM月dd日_HH時mm分ss秒");
String timeStr = sdf.format(new Date());
?
獲取時間格式的函數是
format
,這個函數的參數是
java.util.Date
對象,這個沒有什么花頭。
要說明一下的是這個
pattern
,所謂的模式。這里,
yyyy,MM,dd
等,這就是模式。
我們可以在
SimpleDateFormat
的構造函數中指定模式,比如
SimpleDateFormat sdf = new SimpleDateFormat("
yyyy-MM-dd
",Locale.SIMPLIFIED_CHINESE);
也可以獲取時間格式的時候使用applyPattern函數臨時指定,上面的例子就是這樣。
什么字符代表什么,這是
j2se
約定好的,設置模式的時候,我們可以使用約定好的字符加上任何我們想要的字符串。
j2se
對字符所代表的模式的約定列表如下:
?
?
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 |