Java日期時間
Java的java.util
包提供了Date
類,該類封裝了當前的日期和時間。Date
類支持兩個構造函數,如下表所示。
編號
構造函數
描述
1
Date()
此構造函數使用當前日期和時間來初始化對象。
2
Date(long millisec)
此構造函數接受一個參數,該參數等於自1970年1月1日午夜以來經過的毫秒數。
以下是Date
類的方法列表 -
編號
方法
描述
1
boolean after(Date date)
如果調用Date
對象包含的日期晚於date
指定的日期,則返回true
,否則返回false
。
2
boolean before(Date date)
如果調用Date
對象包含的日期早於date
指定的日期,則返回true
,否則返回false
。
3
Object clone( )
複製調用的Date
對象。
4
int compareTo(Date date)
將調用對象的值與date
的值進行比較。 如果值相等則返回0
。 如果調用對象早於date
,則返回負值。 如果調用對象晚於date
,則返回正值。
5
int compareTo(Object obj)
如果obj
對象是Date
類對象,則與compareTo(Date)
操作相同。 否則,它會拋出ClassCastException
。
6
boolean equals(Object date)
如果調用Date
對象包含與date
指定的時間和日期相同的時間和日期,則返回true
,否則返回false
。
7
long getTime()
返回自1970年1月1日以來經過的毫秒數。
8
int hashCode()
返回調用對象的哈希碼。
9
void setTime(long time)
設置時間指定的時間和日期,表示從1970年1月1日午夜開始的經過時間(以毫秒爲單位)。
10
String toString( )
將調用Date
對象轉換爲字符串並返回結果。
1. 獲取當前日期和時間
這是一種在Java中獲取當前日期和時間的簡單方法。可以使用Date
對象toString()
方法來打印當前日期和時間,如下所示 -
import java.util.Date;
public class Test {
public static void main(String args[]) {
// 實例化Date對象
Date date = new Date();
// display time and date using toString()
System.out.println(date.toString());
}
}
執行上面示例代碼,得到以下結果:
Fri Mar 15 13:00:37 CST 2020
2. 使用SimpleDateFormat設置日期格式
SimpleDateFormat
是一個具體的類,用於以區域設置的方式格式化和解析日期。 SimpleDateFormat
用於從爲日期時間格式選擇用戶定義的模式。
示例
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String args[]) {
Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat("yyyy.MM.dd (E)'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
SimpleDateFormat ft2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println("Current Datetime: " + ft2.format(dNow));
}
}
執行上面示例代碼,得到以下結果:
Current Date: 2019.03.15 (星期五)at 01:04:52 下午 CST
Current Datetime: 2019-03-15 01:04:52
DateFormat格式代碼
要指定時間格式,請使用時間模式字符串。 在此模式中,所有ASCII字母都保留爲模式字母,其定義如下 -
編號
字符
描述
示全殲
1
G
時代指示符
AD
2
y
四位數的年份值
2019
3
M
月份
July or 07
4
d
日
10
5
h
小時 A.M./P.M. (1~12)
12
6
H
24小時制的小時表示 (0~23)
22
7
m
分鐘
30
8
s
秒鐘
55
9
S
毫秒
234
10
E
星期幾
Tuesday
11
D
一年中的第幾天
360
12
F
一個月中的某一天
2 (second Wed. in July)
13
w
一年中的第幾個星期
40
14
W
一月中的第幾個星期
1
15
a
A.M./P.M. 標記
PM
16
k
小時 (1~24)
24
17
K
小時 A.M./P.M. (0~11)
10
18
z
時區
Eastern Standard Time
19
‘
轉義文本
Delimiter
20
`
單引號
`
3. 使用printf格式化日期
使用printf
方法來完成日期和時間格式化。使用雙字母格式,以t
開頭並以表格的一個字母結尾,如下面的代碼所示。
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date
String str = String.format("Current Date/Time : %tc", date);
System.out.printf(str);
}
}
執行上面示例代碼,得到以下結果:
Current Date/Time : 星期五 三月 15 13:18:24 CST 2019
如果多次提供日期來格式化每個部分,那多少會有點愚蠢。 格式字符串可以指示要格式化的參數的索引。
索引必須緊跟%
,並且必須以$
結尾。
示例
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
}
}
執行上面示例代碼,得到以下結果:
Due date: 三月 16, 2019
或者,可以使用<
標誌。 它表示再次使用與前面的格式規範相同的參數。
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display formatted date
System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
}
}
執行上面示例代碼,得到以下結果:
Due date: 三月 16, 2019
4. 日期和時間轉換字符
示例
編號
字符
描述
示例
1
c
完全日期和時間
Mon May 04 09:51:52 CDT 2019
2
F
ISO 8601 date
2004-02-09
3
D
U.S. formatted date (month/day/year)
02/09/2004
4
T
24小時時間
18:05:19
5
r
12小時時間
06:05:19 pm
6
R
24小時時間, 無秒鐘。
18:05
7
Y
四位數年份(前導零)
2019
8
y
年份的最後兩位數(帶前導零)
19
9
C
年份的前兩位數(帶前導零)
20
10
B
月份全名稱
February
11
b
縮寫的月份名稱
Feb
12
m
兩位數月份(帶前導零)
02
13
d
兩位數的日期(帶前導零)
03
14
e
兩位數的日期(沒有前導零)
9
15
A
完整的工作日名稱
Monday
16
a
縮寫的工作日名稱
Mon
17
j
一年中的三位數日(帶前導零)
069
18
H
兩位數小時(前導零),介於00和23之間
18
19
k
兩位數小時(不帶前導零),介於0和23之間
18
20
I
兩位數小時(前導零),介於01和12之間
06
21
l
兩位數小時(不帶前導零),介於1和12之間
6
22
M
兩位數分鐘(帶前導零)
05
23
S
兩位數秒(帶前導零)
19
24
L
三位數毫秒(帶前導零)
047
25
N
九位納秒(帶前導零)
047000000
26
P
大寫上午或下午標記
PM
27
p
小寫上午或下午標記
pm
28
z
GMT的RFC 822數字偏移量
-0800
29
Z
時區
PST
30
s
自1970-01-01 00:00:00 GMT以來的秒數
1078884319
31
Q
自1970-01-01 00:00:00 GMT以來的毫秒數
1078884319047
還有其他與日期和時間相關的有用類。 有關更多詳細信息,請參閱Java標準文檔。
5. 將字符串解析爲日期
SimpleDateFormat
類有一些額外的方法,特別是parse()
,它用於根據存儲在給定的SimpleDateFormat
對象中的格式來解析字符串。
示例
import java.util.*;
import java.text.*;
public class Test {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
String input = args.length == 0 ? "2019-11-11" : args[0];
System.out.print(input + " 解析爲:");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
執行上面示例代碼,得到以下結果:
2019-11-11 解析爲:Mon Nov 11 00:00:00 CST 2019
6. 睡眠一段時間
可以在計算機生命週期的任何時間段內睡眠。 例如,以下程序將睡眠3
秒鐘 -
import java.util.*;
import java.text.*;
public class Test {
public static void main(String args[]) {
try {
System.out.println(new Date());
Thread.sleep(5 * 60 * 10);
System.out.println(new Date());
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
執行上面示例代碼,得到以下結果:
Sat Mar 16 15:51:43 CST 2019
Sat Mar 16 15:51:46 CST 2019
7. 測量經過的時間
有時,可能需要以毫秒爲單位測量時間點。 重寫上面的例子 -
import java.util.*;
import java.text.*;
public class Test {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis();
System.out.println(new Date());
Thread.sleep(5 * 60 * 10);
System.out.println(new Date());
long end = System.currentTimeMillis();
long diff = end - start;
System.out.println("時間差爲: " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
執行上面示例代碼,得到以下結果:
Sat Mar 16 15:53:25 CST 2019
Sat Mar 16 15:53:28 CST 2019
Difference is : 3021