java8时间API

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/litte_frog/article/details/84348540

创建

now:获取当前
of:指定年月日或时分秒
atTime:给LocalDate指定时分秒成为LocalDateTime
atDate:获取LocalDateTime中的LocalDate

        LocalDate localDate = LocalDate.now();                                          // 2018-11-22
        LocalTime localTime = LocalTime.of(2, 20, 30);                                  // 02:20:30
        LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);           // 2018-11-22T02:20:30
        LocalDateTime localDateTime1 = localDate.atStartOfDay();                        // 2018-11-22T00:00
        LocalDateTime localDateTime2 = localDate.atTime(20, 12, 59);                    // 2018-11-22T20:12:59
        LocalDateTime localDateTime3 = localTime.atDate(localDate);                     // 2018-11-22T02:20:30

        LocalDateTime dateTime = LocalDateTime.parse("2020-10-10 02:30:05",
                DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println(dateTime);                   // 2020-10-10T02:30:05
        System.out.println(dateTime.toLocalDate());     // 2020-10-10
        System.out.println(dateTime.toLocalTime());     // 02:30:05

获取

通过getXXX来获取日期中的那年月日时分秒,以及当月天数,是否闰年等

        LocalDateTime date = LocalDateTime.now();   // 2018-11-22T18:27:46.349
        int year = date.getYear();                  // 2018
        int monthValue = date.getMonthValue();      // 11
        Month month = date.getMonth();              // NOVEMBER
        int dayOfMonth = date.getDayOfMonth();      // 22
        int hour = date.getHour();                  // 18
        int minute = date.getMinute();              // 27
        int second = date.getSecond();              // 46
        int nano = date.getNano();                  // 349000000
        int dayOfYear = date.getDayOfYear();        // 326
        DayOfWeek dayOfWeek = date.getDayOfWeek();  // THURSDAY
        LocalDate localDate = date.toLocalDate();   // 2018-11-22
        int lengthOfYear = localDate.lengthOfYear();// 365
        int lengthOfMonth = localDate.lengthOfMonth();// 30
        boolean leapYear = localDate.isLeapYear();  // false

        int i = localDate.get(ChronoField.DAY_OF_MONTH); // 22
        int i1 = date.get(ChronoField.HOUR_OF_DAY);      // 18

修改

通过withXXX直观的修改日期,也可以通过plus做增量、minus做减量
通过修改with方法中参数TemporalAdjusters的值获取本月第一天,下月最后一天,第几个周几等的日期

        // 8012-11-15T22:40
        LocalDateTime time = LocalDateTime.of(8012, Month.NOVEMBER, 15, 22, 40);
        LocalDateTime time1 = time.withYear(2018)
                .withMonth(Month.OCTOBER.getValue())
                .withDayOfMonth(1)
                .withHour(5)
                .withMinute(0)
                .withSecond(5);             // 2018-10-01T05:00:05

        LocalDateTime time2 = time1.plusYears(10)
                .minusMonths(1)
                .plusDays(1)
                .minusHours(1)
                .plusMinutes(1)
                .minusSeconds(1);           // 2028-09-02T04:01:04

        LocalDate localDate = LocalDate.of(2018, 11, 2);                                    // 2018-11-02
        LocalDate date = localDate.with(TemporalAdjusters.firstDayOfMonth());               // 2018-11-01 本月第一天
        LocalDate date1 = localDate.with(TemporalAdjusters.firstDayOfNextMonth());          // 2018-12-01 下月第一天
        LocalDate date2 = localDate.with(TemporalAdjusters.firstDayOfNextYear());           // 2019-01-01 下年第一天
        LocalDate date3 = localDate.with(TemporalAdjusters.lastDayOfMonth());               // 2018-11-30 本月最后天
        LocalDate date4 = localDate.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));  // 2018-11-25 当月最后周日
        LocalDate date5 = localDate.with(TemporalAdjusters.dayOfWeekInMonth(1,DayOfWeek.SATURDAY)); // 2018-11-03 当月第一周六
        LocalDate date6 = localDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));         // 2018-11-04 下个周日

格式化输出

DateTimeFormatter用来格式化日期,也可以自定义格式

        LocalDateTime time = LocalDateTime.of(2018, 12, 1, 10, 20, 30);
        String s1 = time.format(DateTimeFormatter.ISO_DATE_TIME);                       // 2018-12-01T10:20:30
        String s2 = time.format(DateTimeFormatter.BASIC_ISO_DATE);                      // 20181201
        String s3 = time.format(DateTimeFormatter.ofPattern("yyyy MM dd -- HH:mm:ssS"));// 2018 12 01 -- 10:20:300

        DateTimeFormatter myFormatter = new DateTimeFormatterBuilder()
                .appendText(ChronoField.YEAR)
                .appendLiteral("年")
                .appendText(ChronoField.MONTH_OF_YEAR)
                .appendText(ChronoField.DAY_OF_MONTH)
                .appendLiteral("日 第")
                .appendText(ChronoField.DAY_OF_YEAR)
                .appendLiteral("天|")
                .appendText(ChronoField.DAY_OF_WEEK)
                .appendLiteral(" ")
                .parseCaseInsensitive()
                .toFormatter(Locale.CHINA);

        String s4 = time.format(myFormatter);       // 2018年十二月1日 第335天|星期六

时区

通过atZone来获取带有指定时区的日期,也可以通过ZoneOffset 表示所在时区偏移量

        LocalDateTime time = LocalDateTime.now();
        ZonedDateTime shanghai = time.atZone(ZoneId.of("Asia/Shanghai"));
        ZonedDateTime Anchorage = time.atZone(ZoneId.of("America/Anchorage"));
        System.out.println(shanghai);       // 2018-11-22T20:36:47.733+08:00[Asia/Shanghai]
        System.out.println(Anchorage);      // 2018-11-22T20:36:47.733-09:00[America/Anchorage]

        ZoneOffset offset = ZoneOffset.of("-01:00");
        OffsetDateTime offsetDateTime = OffsetDateTime.of(time, offset);
        System.out.println(offsetDateTime); // 2018-11-22T20:36:47.733-01:00

LocalDateTime = LocalDate + LocalTime
ZonedDateTime = LocalDateTime + ZoneId

猜你喜欢

转载自blog.csdn.net/litte_frog/article/details/84348540