Java 8 時間日期使用

1、日期時間

Java 8經過發佈新的Date-Time API (JSR 310)來進一步增強對日期與時間的處理。java.util.Date和SimpleDateFormatter都不是線程安全的,而LocalDate和LocalTime和最基本的String同樣,是不變類型,不但線程安全,並且不能修改。如下爲一些經常使用時間對象:java

  • Instant:表示時刻,不直接對應年月日信息,須要經過時區轉換
  • LocalDateTime: 表示與時區無關的日期和時間信息,不直接對應時刻,須要經過時區轉換
  • LocalDate:表示與時區無關的日期,與LocalDateTime相比,只有日期信息,沒有時間信息
  • LocalTime:表示與時區無關的時間,與LocalDateTime相比,只有時間信息,沒有日期信息
  • ZonedDateTime: 表示特定時區的日期和時間
  • ZoneId/ZoneOffset:表示時區

一、LocalDategit

       LocalDate now = LocalDate.now();
        LocalDate now1 = LocalDate.now(Clock.systemUTC());

        System.out.println(now);
        System.out.println(now1);

        LocalDate of = LocalDate.of(2019, 3, 6);
        //嚴格按照ISO yyyy-MM-dd驗證,03寫成3都不行
        LocalDate parse = LocalDate.parse("2019-03-06");
        System.out.println(of);
        System.out.println(parse);

        System.out.println("**************now****************");

        //當前開始時間
        System.out.println(now.atStartOfDay());
        //當月第一天日期
        System.out.println(now.with(TemporalAdjusters.firstDayOfMonth()));
        //本月次日日期
        System.out.println(now.withDayOfMonth(2));
        //當月最後一天
        System.out.println(now.with(TemporalAdjusters.lastDayOfMonth()));
        System.out.println(now.getDayOfMonth());
        //當月下一天
        System.out.println(now.plusDays(1));
        //當月上一天
        System.out.println(now.minusDays(1));
        System.out.println(now.getDayOfWeek());
        //當月下一週
        System.out.println(now.plusWeeks(1));
        //當月上一週
        System.out.println(now.minusWeeks(1));
        System.out.println(now.getMonth() + "-" + now.getMonthValue());
        //當月下一個月
        System.out.println(now.plusMonths(1));
        //當月上一個月
        System.out.println(now.minusMonths(1));

        //時間比較
        System.out.println(now.isEqual(LocalDate.of(2019, 03, 06)));

二、LocalTimegithub

        LocalTime now = LocalTime.now();
        //指定時區
        LocalTime now1 = LocalTime.now(Clock.system(ZoneId.systemDefault()));
        LocalTime now2 = LocalTime.now(Clock.systemUTC());

        System.out.println(now);
        System.out.println(now1);
        System.out.println(now2);

        System.out.println("************now************");
        //清除毫秒位
        System.out.println(now.withNano(0));
        //獲取當前的小時
        System.out.println(now.getHour());
        //解析時間時間也是按照ISO格式識別,但能夠識別如下3種格式: 12:00 12:01:02 12:01:02.345
        System.out.println(LocalTime.parse("11:58:12"));

        //時間比較
        LocalTime other = LocalTime.of(13, 45, 59);
        System.out.println(now.isBefore(other));
        System.out.println(now.isAfter(other));

三、LocalDateTime安全

        LocalDateTime now = LocalDateTime.now();
        LocalDateTime now1 = LocalDateTime.now(Clock.system(ZoneId.systemDefault()));
        LocalDateTime now2 = LocalDateTime.now(Clock.systemUTC());

        System.out.println(now);
        System.out.println(now1);
        System.out.println(now2); 
     //時間格式轉換 System.out.println(now.format(DateTimeFormatter.ofPattern(PATTERN_1))); System.out.println(now.format(DateTimeFormatter.ofPattern(PATTERN_2))); System.out.println(now.format(DateTimeFormatter.ofPattern(PATTERN_3)));

四、Date轉換爲LocalDateTimespa

  /**
     * Date轉換爲LocalDateTime
     * @return LocalDateTime
     */
    public static LocalDateTime date2LocalDateTime() {
        Date date = new Date();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());

        return localDateTime;
    }

五、LocalDateTime轉換爲Date線程

    /**
     * LocalDateTime轉換爲Date
     * @return Date
     */
    public static Date localDateTime2Date() {
        LocalDateTime now = LocalDateTime.now();
        Instant instant = now.atZone(ZoneId.systemDefault()).toInstant();

        Date date = Date.from(instant);

        return date;
    }

六、秒與納秒級別上的一段時間間隔code

    /**
     * 秒與納秒級別上的一段時間
     */
    public static void duration() {

        LocalDateTime from = LocalDateTime.of(2018, Month.OCTOBER, 1, 0, 0, 0);
        LocalDateTime to = LocalDateTime.of(2019, Month.MARCH, 6, 23, 59, 59);

        Duration between = Duration.between(from, to);
        System.out.println(between.toDays());
        System.out.println(between.toHours());
    }

 

源碼參照:Github

相關文章
相關標籤/搜索