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 |
三,設置時間
現在設置時間,推薦 使用java.util.Calendar類來進行操作,因為java.util.Date類很多方法都過時了,
Calendar 類有很多重載的設置時間的方法
我們可以針對于某一項進行設置,也可以同時進行很多設置
void |
set(int field, int value)
將給定的日歷字段設置為給定值。 |
void |
set(int year, int month, int date)
設置日歷字段 YEAR 、MONTH 和 DAY_OF_MONTH 的值。 |
void |
set(int year, int month, int date, int hourOfDay, int minute)
設置日歷字段 YEAR 、MONTH 、DAY_OF_MONTH 、HOUR_OF_DAY 和 MINUTE 的值。 |
void |
set(int year, int month, int date, int hourOfDay, int minute, int second)
設置字段 YEAR 、MONTH 、DAY_OF_MONTH 、HOUR 、MINUTE 和 SECOND 的值。 |
其中第一個就是給特定的字段設值,后面三個就是針對多個字段賦值
四,時間運算
時間的運算,無外乎就是加加減減,然后比較誰早誰晚而已,這些需求JAVA的API已經幫我們實現的很好了。一般比較時間的可以用如下的方法
abstract void |
add(int field, int amount)
根據日歷的規則,為給定的日歷字段添加或減去指定的時間量。 |
boolean |
after(Object when)
判斷此 Calendar 表示的時間是否在指定 Object 表示的時間之后,返回判斷結果。 |
boolean |
before(Object when)
判斷此 Calendar 表示的時間是否在指定 Object 表示的時間之前,返回判斷結果。 |
第一個是給某個字段加上某個數量的時間,雖然這個方法名叫add ,我們要減也是調用它的,只不過我們傳入的是負數。
其實JAVA對時間操作的支持還是挺豐富的。希望大家的日常的使用中有更多的發現。
盡管千里冰封
依然擁有晴空
你我共同品味JAVA的濃香.
posted on 2007-09-11 23:56
千里冰封 閱讀(39712)
評論(14) 編輯 收藏 所屬分類:
JAVASE