java 8时间操作_Java8 时间日期类操作
Java8 時間日期類操作
Java8的時間類有兩個重要的特性
線程安全
不可變類,返回的都是新的對象
顯然,該特性解決了原來java.util.Date類與SimpleDateFormat線程不安全的問題。同時Java8的時間類提供了諸多內置方法,方便了對時間進行相應的操作。
上圖為Java8時間類的覆蓋范圍
相關的類有
LocalDate
LocalTime
LocalDateTime
ZoneId
ZonedDateTime
Instant
Instant類
Instant類用來表示格林威治時間(UTC)開始的時間點,初始時間為1970-01-01T00:00:00Z。也就是從1970年一月一號開始計時,得到的秒值甚至是是納秒值。該時間戳可以與日期時間轉換。因此可以表示人類世界最完整的時間。該類相比原來java.util.Date類,精確到了納秒級別。
獲取當前的秒值和納秒值
Instant instant = Instant.now();
System.out.println(instant);
System.out.println(instant.getEpochSecond());
System.out.println(instant.getNano());
結果如下
2019-08-28T07:59:54.979Z
1566979194
979000000
將指定秒值轉為Instant。Instant.ofEpochSecond()方法。
Instant instant1 = Instant.ofEpochSecond(1566981233L);
System.out.println(instant1);
LocalDate、LocalTime、LocalDateTime、ZonedDateTime
Java8使用LocalDate、LocalTime、LocalDateTime、ZonedDateTime分別操作日期、時間、日期和時間。
這四個類的默認使用系統時區
獲取當天日期及時間
LocalDate today = LocalDate.now();
System.out.println(today);
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
LocalTime localTime = LocalTime.now();
System.out.println(localTime);
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println(zonedDateTime);
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId);
結果如下
2019-08-28
2019-08-28T17:42:01.964
17:42:01.965
2019-08-28T17:42:01.965+08:00[Asia/Shanghai]
Asia/Shanghai
指定日期2019-09-30并通過isBefore()判斷是否今天在指定日期之前
LocalDate future = LocalDate.of(2019, 9, 30);
boolean before = today.isBefore(future);
System.out.println(before);
LocalDateTime轉String 通過DateTimeFormatter指定轉換格式
String formatStr = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"));
System.out.println(formatStr);
String轉為LocalDate
String str = "2019-01-02";
LocalDate localDate2 = LocalDate.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(localDate2);
LocalDateTime與Instant的互相轉換
獲取當天的秒值和毫秒值。LocalDateTime轉Instant獲取時間戳。由于LocalDateTime并沒有包含時區,轉為Instant需要指明所在時區。北京時間也就是東八區ZoneOffset.of("+8")
long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
System.out.println(milliSecond);
long second = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"));
System.out.println(second);
Instant時間戳轉LocalDateTime。使用LocalDateTime.ofInstant方法,需要指定轉換為哪個時區的時間
LocalDateTime localDateTime2 = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()); //使用系統默認時間
System.out.println(localDateTime2);
結果如下
2019-08-28T16:33:53.639
參考文章
總結
以上是生活随笔為你收集整理的java 8时间操作_Java8 时间日期类操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件行业从事人员,计算机基础须知(二)-
- 下一篇: java open course_关于开