JDK8特性之LocalDateTime

ldcaws發表於2020-10-12

JDK1.8除了新增了lambda表示式、stream流之外,它還新增了全新的日期時間API。
在JDK1.8之前,Java處理日期、日曆和時間的方式一直為社群所詬病,將 java.util.Date設定為可變型別,以及SimpleDateFormat的非執行緒安全使其應用非常受限。因此推出了java.time包,該包下的所有類都是不可變型別而且執行緒安全。

  • LocalDate:本地日期,不包含具體時間, 格式 yyyy-MM-dd。
  • LocalTime:本地時間,不包含日期. 格式 yyyy-MM-dd HH:mm:ss.SSS 。
  • LocalDateTime:組合了日期和時間,但不包含時差和時區資訊。

LocalDateTime程式碼示例:
LocalDate\LocalTime\LocalDateTime的使用

public class LocalDateTimeDemo {
    public static void main(String[] args) {
        //本地日期,不包括時分秒
        LocalDate nowDate = LocalDate.now();
        //本地日期,包括時分秒
        LocalDateTime nowDateTime = LocalDateTime.now();
        System.out.println("當前是:" + nowDate);
        System.out.println("當前是:" + nowDateTime);
        //當前是:2020-10-12
        //當前是:2020-10-12T14:03:12.829

        System.out.println("當前年:" + nowDateTime.getYear());
        System.out.println("當前年份天數:" + nowDateTime.getDayOfYear());
        System.out.println("當前月:" + nowDateTime.getMonthValue());
        System.out.println("當前時:" + nowDateTime.getHour());
        System.out.println("當前分:" + nowDateTime.getMinute());
        System.out.println("當前時間:" + nowDateTime.toString());
        //當前年:2020
        //當前年份天數:286
        //當前月:10
        //當前時:14
        //當前分:7
        //當前時間:2020-10-12T14:07:53.685

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println("格式化時間:" + ldt.format(formatter));
        //格式化時間:2020-10-12 14:10:51.062

        LocalDate ld1 = LocalDate.parse("2017-11-17");
        LocalDate ld2 = LocalDate.parse("2018-01-05");
        Period period = Period.between(ld1, ld2);
        System.out.println("相差年:" + period.getYears() + "相差月:" + period.getMonths() + "相差天:" + period.getDays());
        System.out.println("相差月份:" + ChronoUnit.MONTHS.between(ld1,ld2));
        System.out.println("相差總天數:" + ChronoUnit.DAYS.between(ld1,ld2));
        //相差年:0相差月:1相差天:19
        //相差月份:1
        //相差總天數:49

        LocalDateTime ldt1 = LocalDateTime.now();
        LocalDateTime ldt2 = ldt1.plusMinutes(10);
        System.out.println("當前時間是否大於:" + ldt1.isAfter(ldt2));
        System.out.println("當前時間是否小於:" + ldt1.isAfter(ldt2));
        //當前時間是否大於:false
        //當前時間是否小於:false

        Clock clock = Clock.systemUTC();
        System.out.println("當前時間戳:" + clock.millis());
        Clock clock2 = Clock.system(ZoneId.of("Asia/Shanghai"));
        System.out.println("亞洲上海此時的時間戳:" + clock2.millis());
        Clock clock3 = Clock.system(ZoneId.of("America/New_York"));
        System.out.println("美洲紐約此時的時間戳:" + clock3.millis());
        //當前時間戳:1602483959576
        //亞洲上海此時的時間戳:1602483959576
        //美洲紐約此時的時間戳:1602483959580
    }
}

在此記錄jdk1.8中時間的用法,後續加強練習。

相關文章