0%

java时间Date,timestamp,timezone

文中输出的时间,都是相同的,便于读者观看。

Date转Timestamp

1
2
3
4
5
Date date = new Date();
long currentMillis = date.getTime()
System.out.println(currentMillis);

1578064861125

java.util.Date, 这个类跟时区是无关的。

Timestamp转Date

1
2
3
4
5
long timeMillis = System.currentTimeMillis();
Date date = new Date(timeMillis);
System.out.println(date);

Fri Jan 03 23:21:01 CST 2020

Date转日期字符串

当我们打印出Date时,显示的时间,就是带有时区的字符串了。那为什么是CST(China Standard Time)呢?

1
2
3
4
String timeZoneId = TimeZone.getDefault().getID();
System.out.println(timeZoneId);

Asia/Shanghai

发现系统默认的时区id为Asia/Shanghai

如何查看有哪些时区id呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
String[] availableIDs = TimeZone.getAvailableIDs();
for (String availableID : availableIDs) {
System.out.println(availableID);
}

Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
...
Asia/Shanghai
Asia/Singapore
Asia/Srednekolymsk
Asia/Taipei

如果我们想查看日本东京的时间呢?

1
2
3
4
5
6
7
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS Z");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
String dateStr = sdf.format(date);
System.out.println(dateStr);

2020-01-04 00:21:01.125 +0900