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è)要解決的問(wèn)題
二、獲取某個(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ù),是用來(lái)設(shè)置時(shí)區(qū)的,這里用到了java.util.Locale這個(gè)類,這個(gè)類了面定義了很多靜態(tài)變量,直接拿過(guò)來(lái)用就OK,我們把時(shí)區(qū)設(shè)置為Locale.SIMPLIFIED_CHINESE,只看名字,這個(gè)靜態(tài)變量的意義已經(jīng)很清楚了。
接下來(lái)我們使用這個(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è)沒(méi)有什么花頭。
要說(shuō)明一下的是這個(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
現(xiàn)在設(shè)置時(shí)間,推薦 使用java.util.Calendar類來(lái)進(jìn)行操作,因?yàn)閖ava.util.Date類很多方法都過(guò)時(shí)了,
Calendar 類有很多重載的設(shè)置時(shí)間的方法
我們可以針對(duì)于某一項(xiàng)進(jìn)行設(shè)置,也可以同時(shí)進(jìn)行很多設(shè)置
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) 設(shè)置日歷字段 YEAR 、MONTH 、DAY_OF_MONTH 、HOUR_OF_DAY 和 MINUTE 的值。 |
void |
set(int year, int month, int date, int hourOfDay, int minute, int second) 設(shè)置字段 YEAR 、MONTH 、DAY_OF_MONTH 、HOUR 、MINUTE 和 SECOND 的值。 |
四,時(shí)間運(yùn)算
時(shí)間的運(yùn)算,無(wú)外乎就是加加減減,然后比較誰(shuí)早誰(shuí)晚而已,這些需求JAVA的API已經(jīng)幫我們實(shí)現(xiàn)的很好了。一般比較時(shí)間的可以用如下的方法
abstract void |
add(int field, int amount) 根據(jù)日歷的規(guī)則,為給定的日歷字段添加或減去指定的時(shí)間量。 |
boolean |
after(Object when) 判斷此 Calendar 表示的時(shí)間是否在指定 Object 表示的時(shí)間之后,返回判斷結(jié)果。 |
boolean |
before(Object when) 判斷此 Calendar 表示的時(shí)間是否在指定 Object 表示的時(shí)間之前,返回判斷結(jié)果。 |
第一個(gè)是給某個(gè)字段加上某個(gè)數(shù)量的時(shí)間,雖然這個(gè)方法名叫add ,我們要減也是調(diào)用它的,只不過(guò)我們傳入的是負(fù)數(shù)。
其實(shí)JAVA對(duì)時(shí)間操作的支持還是挺豐富的。希望大家的日常的使用中有更多的發(fā)現(xiàn)。
盡管千里冰封
依然擁有晴空
你我共同品味JAVA的濃香.