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