時間處理相關類
“時間如流水,一去不復返”,時間是一個一維的東東。所以,我們需要一把刻度尺來區表達和度量時間。在計算機世界,我們把1970?年?1?月?1?日?00:00:00定為基準時間,每個度量單位是毫秒(1秒的千分之一)。
我們用long類型的變量來表示時間,從基準時間往前幾億年,往后幾億年都能表示。如果想獲得現在時刻的“時刻數值”,可以使用:
????long??now1 =?System.currentTimeMillis();
這個“時刻數值”是所有時間類的核心值,年月日都是根據這個“數值”計算出來的。我們工作學習涉及的時間相關類有如下這些:
圖1?日期時間相關類
Date時間類(java.util.Date)
在標準Java類庫中包含一個Date類。它的對象表示一個特定的瞬間,精確到毫秒。
?Date()分配一個Date對象,并初始化此對象為當前的日期和時間精確到毫秒)。
?(long?date)?分配?Date?對象并初始化此對象,以表示自從標準基準時間(稱為“歷元(epoch)”,即?1970?年?1?月?1?日?00:00:00 GMT)以來的指定毫秒數。
?boolean?after(Date?when)?測試此日期是否在指定日期之后。?
?booleanbefore(Date?when)??測試此日期是否在指定日期之前。
?boolean?equals(Object?obj)?比較兩個日期的相等性。
??long?getTime()返回自?1970?年?1?月?1?日?00:00:00 GMT?以來此?Date?對象表示的毫秒數。
?String?toString()?把此?Date?對象轉換為以下形式的?String:
dow mon dd hh:mm:ss zzz yyyy?其中:?dow?是一周中的某一天?(Sun、?Mon、Tue、?Wed、?Thu、?Fri、?Sat)。
【示例1】Date類的使用
import?java.util.Date;
public?class?Test {
????public?static?void?main(String[] args) {
?????? Date date1 =?new?Date();
?????? System.out.println(date1.toString());
???????long?i = date1.getTime();
?????? Date date2 =?new?Date(i - 1000);
?????? Date date3 =?new?Date(i + 1000);
?????? System.out.println(date1.after(date2));
?????? System.out.println(date1.before(date2));
?????? System.out.println(date1.equals(date2));
?????? System.out.println(date1.after(date3));
?????? System.out.println(date1.before(date3));
?????? System.out.println(date1.equals(date3));
?????? System.out.println(
???????????new?Date(1000L * 60 * 60 * 24 * 365 * ? 39L).toString());? //why?
??? }
}
查看API文檔大家可以看到很多方法過時了,JDK1.1之前的Date包含了:日期操作、字符串轉化成時間對象,時間對象。?
JDK1.1之后,日期操作使用:Canlendar類來。?字符串轉化:DateFormat。
DateFormat類和SimpleDateFormat類
·作用
把時間對象轉化成指定格式的字符串。反之,把指定格式的字符串轉化成時間對象。
DateFormat是一個抽象類,一般使用SimpleDateFormat類。?
【示例2】DateFormat類和SimpleDateFormat類的使用
import?java.text.ParseException;
import?java.text.SimpleDateFormat;
import?java.util.Date;
public?class?Test {
????public?static?void?main(String[] args)?throws?? ParseException {
??????? //new出SimpleDateFormat對象
?????? SimpleDateFormat s1 =?new?? SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
?????? SimpleDateFormat s2 =?new?? SimpleDateFormat("yyyy-MM-dd");
???????//將時間對象轉換成字符串
?????? String daytime = s1.format(new?Date());
?????? System.out.println(s2.format(new?Date()));
?????? System.out.println(new?? SimpleDateFormat("hh:mm:ss").format(new?Date()));
???????//將符合指定格式的字符串轉成成時間對象.字符串格式需要和指定格式一致。
?????? String time = "2007-10-7";
?????? Date date = s2.parse(time);
?????? System.out.println("date1: " + date);
?????? time = "2007-10-7 20:15:30";
?????? date = s1.parse(time);
?????? System.out.println("date2: " + date);
??? }
}
表??格式化字符的含義
字母
日期或時間元素
表示
示例
G
Era?標志符
Text
AD
y
年
Year
1996
;?96
M
年中的月份
Month
July
;?Jul
; ??07
w
年中的周數
Number
27
W
月份中的周數
Number
2
D
年中的天數
Number
189
d
月份中的天數
Number
10
F
月份中的星期
Number
2
E
星期中的天數
Text
Tuesday
;?Tue
a
Am/pm?標記
Text
PM
H
一天中的小時數(0-23)
Number
0
k
一天中的小時數(1-24)
Number
24
K
am/pm?中的小時數(0-11)
Number
0
h
am/pm?中的小時數(1-12)
Number
12
m
小時中的分鐘數
Number
30
s
分鐘中的秒數
Number
55
S
毫秒數
Number
978
z
時區
General ? time zone
Pacific Standard Time
;?PST
;?GMT-08:00
Z
時區
RFC ? 822 time zone
0800
下節,我們繼續討論「時間處理相關類」。
「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數據庫從入門到精通
C-手刃移動前端和Web前端
D-J2EE從了解到實戰
E-Java高級框架精解
F-Linux和Hadoop?