java8提供的時間工具類

java8之前,我對于java提供的時間工具類,覺得很麻煩。因此我偏向使用appache或者google提供的一些工具包。但java8,為我們重新提供時間工具類。這次所提供的類都在Time包中,而這其中最值得的我們去了解的類有五個。

  • Instant 它代表的是時間戳,比如2014-01-14T02:20:13.592Z,這可以從java.time.Clock類中獲取,像這樣:
    Instant current = Clock.system(ZoneId.of(“Asia/Tokyo”)).instant();
  • LocalDate 它表示的是不帶時間的日期,比如2014-01-14。它可以用來存儲生日,周年紀念日,入職日期等。
  • LocalTime – 它表示的是不帶日期的時間
  • LocalDateTime – 它包含了時間與日期,不過沒有帶時區的偏移量
  • ZonedDateTime – 這是一個帶時區的完整時間,它根據UTC/格林威治時間來進行時區調整

注:這次新的日期和時間工具類都不可變的也是線程安全的。
代碼就是最好的文檔,具體使用如下

        // 獲取當前日期
        LocalDate ld = LocalDate.now();
        System.out.println(ld);
        // 輸出結果:2017-03-20

        // 獲取當前的年月日
        int year = ld.getYear();
        int month = ld.getMonthValue();
        int day = ld.getDayOfMonth();
        System.out.println("年:" + year + "月:" + month + "日:" + day);
        // 輸出結果:年:2017月:3日:20

        // 獲取指定日期
        LocalDate lcl = LocalDate.of(2020, 2, 5);
        System.out.println(lcl);
        // 輸出結果:2020-02-05 ,這比我們自己拼接字符串可太爽了^_^

        // 獲取指定時間,具體到毫秒
        LocalDateTime lct = LocalDateTime.now();
        System.out.println(lct);
        // 輸出結果:2017-03-20T15:38:32.264

        // 指定具體時間
        LocalDateTime lct1 = LocalDateTime.of(1998, 3, 4, 14, 33);
        System.out.println(lct1);
        // 輸出結果:1998-03-04T14:33

        // 判斷兩個日期是否相等
        LocalDate lld1 = LocalDate.now();
        LocalDate lld2 = LocalDate.of(2017, 3, 20);
        if (lld1.equals(lld2)) {
            System.out.println("日期相等");
        }
        // 輸出結果:日期相等

        // 判斷是不是生日,比如以我的生日舉例聲明
        LocalDate ldt = LocalDate.of(1994, 10, 07);
        LocalDate ldt1 = LocalDate.of(2020, 10, 07);
        MonthDay md = MonthDay.of(ldt.getMonth(), ldt.getDayOfMonth());
        MonthDay md1 = MonthDay.of(ldt1.getMonth(), ldt1.getDayOfMonth());
        if (md.equals(md1)) {
            System.out.println("zhaotong 生日快樂");
        }
        // 輸出結果:zhaotong 生日快樂

        // 從當前時間,向前或向后擴展
        LocalDate lde = LocalDate.now();
        LocalDate lde1 = lde.plusDays(5);// 向后數五天
        System.out.println(lde1);// 2017-03-25
        LocalDate lde2 = lde.minusDays(5);// 向前數五天
        System.out.println(lde2);// 2017-03-15
        LocalDate lde3 = lde.minusWeeks(2);// 向前數兩周
        System.out.println(lde3);// 2017-03-06
        // LocalDateTime 也擁有這些擴展函數,這里就不在一一說明了

        // java 8中的時鐘
        Clock clock = Clock.systemUTC();
        Clock clock1 = Clock.systemDefaultZone();
        System.out.println(clock);
        System.out.println(clock1);

        // 輸出結果:SystemClock[Z],SystemClock[Asia/Shanghai]

        // 判斷一個日期是在另一個日期前面還是后面

        LocalDate today = LocalDate.now();
        LocalDate tomorrow = LocalDate.of(2017, 3, 21);
        if (today.isBefore(tomorrow)) {
            System.out.println(true);
        }
        if (tomorrow.isAfter(today)) {
            System.out.println(true);
        }

        // java8 中處理不同的時區
        LocalDateTime ldtc = LocalDateTime.now();
        ZonedDateTime ldtczone = ZonedDateTime.of(ldtc,
                ZoneId.of("America/New_York"));
        System.out.println(ldtczone);
        // 輸出:2017-03-20T17:35:56.257-04:00[America/New_York]

        // java中如何表示固定的日期
        YearMonth ym = YearMonth.of(2008, Month.FEBRUARY);
        System.out.println(ym.lengthOfMonth());// 2008年的2月是29天

        // 判斷是否為閏年
        LocalDate date = LocalDate.now();
        if (date.isLeapYear()) {
            System.out.println(date + ":" + "是閏年");
        }

        // 獲取兩個日期之間的數據
        LocalDate date1 = LocalDate.of(2000, 10, 07);
        Period per = Period.between(date1, date);
        System.out.println("days:" + per.getDays());
        System.out.println("years:" + per.getYears());
        System.out.println("months:" + per.getMonths());
        // days:13
        // years:16
        // months:5
        // 相差16年,5個月,13天

        // java 8獲取當前時間戳
        Instant is = Instant.now();
        System.out.println(is);
        // 輸出:2017-03-20T09:53:59.433Z

        // 格式化輸出日期
        String goodFriday = "1994-10-07";

        try {

            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            LocalDate holiday = LocalDate.parse(goodFriday, formatter);
            System.out.println(holiday);
        } catch (DateTimeParseException ex) {
            ex.printStackTrace();

        }
        
        //將日期格式化,轉化成字符串
        
        LocalDateTime ldtt=LocalDateTime.now();
        DateTimeFormatter format=DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:a");
        String str=ldtt.format(format);
        System.out.println(str);
        //輸出結果:2017-03-20 06:03:下午
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容