java8 各種時間轉換方法
本來按照常理日期時間是一個很簡單的東西,只需要根據一個時間戳就可以算出當前的時間了。但這其實只是初級的想法,是因為你的項目還沒有到跨時區部署的程度,一旦你的項目要部署到其他時區就會發現,同一個時間戳,在中國代表8點,在日本就代表9點了。Java對日期,日歷及時間的處理一直以來都飽受詬病,尤其是它決定將java.util.Date定義為可修改的以及將SimpleDateFormat實現成非線程安全的,所以隨着java版本的升級,產生了一系列代表時間的類
- java.util.Date
- java.sql.Date
- java.sql.Time
- java.sql.Timestamp
- java.util.Calendar
- java.time.Instant
- java.time.LocalDate
- java.time.LocalTime
- java.time.LocalDateTime
- java.time.ZonedDateTime
其中后5個是java8以后才可以使用的時間類,是不是玲瓏滿目,目不暇接,除此之外這些時間類還有一系列配套格式轉換工具,更是數不勝數。但java8以后的時間類就基本成熟了,可以適應目前所有的需求,下面逐一介紹java8以后的實踐類
1.Instant
它代表的是時間戳
你可已使用instant.toEpochMilli()來輸出Long類型的毫秒數
其他java8以后的時間類型都可以通過toInstant獲取它
2.ZoneId
ZoneId代表的是時區,獲取系統時區:
ZoneId zone = ZoneId.systemDefault();
- 1
中國使用的北京時間是在東八區,日本使用的東京時間是東九區,要根據不同時區獲取時區類可使用一下方法:
ZoneId zoneId = ZoneId.of(“UTC+8”);//獲取東八區的時區
3.LocalDateTime
LocalDate內部存儲有日期和時間
通過 LocalDate.now()可以獲取當前時間,但這個當前時間是基於0時區的,而我們中國位於東八區,所以需要傳入我們的時區,
ZoneId zoneId = ZoneId.of("UTC+8");
LocalDate.now(zoneId)
- 1
- 2
返回的才是北京時間,
4.LocalDate 和LocalTime
LocalDate代表的是日期(年月日),LocalTime代表的是時間(時分秒),用法與LocalDateTime基本相同
5DateTimeFormatter 時間格式化成String
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String str= dtf2.format(dateTime);
- 1
- 2
其中dateTime變量可以是LocalDateTime 也可以是LocalDate和LocalTime
