jdk1.8 新增工具类

optional

Optional.of(T t) : 创建一个 Optional 实例

Optional.empty() : 创建一个空的 Optional 实例

Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例

isPresent() : 判断是否包含值

isPresent(Consumer c):如果存在值则消费

orElse(T t) : 如果调用对象包含值,返回该值,否则返回t

orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值

orElseThrow(Supplier ex):如果不包含值则抛出异常

map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()

flatMap(Function mapper):与 map 类似,要求返回值必须是Optional

时间API

Instant

    /**
     * Instant类用于获取时间戳
     * 时间戳定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
     * <p>
     * 因此,严格来说,不管你处在地球上的哪个地方,任意时间点的时间戳都是相同的。这点有利于线上和客户端分布式应用统一追踪时间信息。
     * <p>
     * 但是不同的时区,当前时间戳对应的当前时间是不同的。
     */
    @Test
    public void test() {
        Instant instant = Instant.now();//默认获取的是utc时区(比北京时间少八个小时)
        ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.systemDefault());
        LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();//将instant转为LocalDateTime
        Instant instant1 = localDateTime.toInstant(ZoneOffset.ofHours(8));//将北京时间转为时间戳
        long l = instant.toEpochMilli();//获取当前毫秒值
    }

localDateTime LocalDate LocalTime

    /**
     * localDateTime 日期和时间
     * LocalDate     日期
     * LocalTime     时间
     */
    @Test
    public void testlocalDateTime() {
        LocalDateTime localDateTime = LocalDateTime.now();//获取当前时间
        DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();//获得星期几
        int dayOfYear = localDateTime.getDayOfYear();//获得今天是这一年的第几天
        int year = localDateTime.getYear();//年
        Month month = localDateTime.getMonth();//月
        int dayOfMonth = localDateTime.getDayOfMonth();//日
        int hour = localDateTime.getHour();//时
        int minute = localDateTime.getMinute();//分
        int second = localDateTime.getSecond();//秒
    }

Duration

    /**
     * Duration 计算时间间隔
     * public static Duration between(Temporal startInclusive, Temporal endExclusive)
     * Temporal的实现类包括了localDateTime,LocalDate,LocalTime,Instant类用于获取时间戳。。。
     */
    @Test
    public void test3() {
        LocalDateTime start = LocalDateTime.of(2020, 1, 3, 1, 1, 1, 1);
        LocalDateTime end = LocalDateTime.now();
        Duration duration = Duration.between(start, end);
        long l = duration.toNanos();//获取间隔纳秒
        long l1 = duration.toDays();//获取天
        long l2 = duration.toMillis();//获取毫秒
        long seconds = duration.getSeconds();//秒
    }

TemporalAdjuster

    /**
     * TemporalAdjuster:时间矫正器(有时我们可能需要获取,例如将日期调整到"下个周日"等操作)
     * TemporalAdjusters:提供了大量静态方法用TemporalAdjuster实现
     */
    @Test
    public void test4() {
        LocalDateTime dateTime = LocalDateTime.now();
        LocalDateTime nextMonday = dateTime.with(TemporalAdjusters.next(DayOfWeek.MONDAY));//获取到下一个周一的日期,时分秒不变

        //自定义时间矫正器,获取下一个工作日
        TemporalAdjuster adjuster = i -> {
            DayOfWeek dayOfWeek = ((LocalDateTime) i).getDayOfWeek();
            if (DayOfWeek.FRIDAY.equals(dayOfWeek)) return ((LocalDateTime) i).plusDays(3);
            else if (DayOfWeek.SATURDAY.equals(dayOfWeek)) return ((LocalDateTime) i).plusDays(2);
            else return ((LocalDateTime) i).plusDays(1);
        };

        LocalDateTime dateTime1 = dateTime.with(adjuster);
    }

DateTimeFormatter

    /**
     * 日期格式化DateTimeFormatter
     */
    @Test
    public void test5() {
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyyMMdd");//时间格式

        TemporalAccessor temporalAccessor = pattern.parse("20201122");//解析时间

        LocalDate localDate = LocalDate.from(temporalAccessor);

        LocalDate now = LocalDate.now();

        String str = now.format(pattern);//将时间转为yyyyMMdd
    }
posted @ 2020-09-02 19:08  刃牙  阅读(468)  评论(0编辑  收藏  举报