【java基础】JAVA8新特性:日期API

之前的笔记中说java8前的时间类型是线程不安全的,针对这个不安全偶在上一篇说时间类型的博客中插播了一下线程池ExecutorService,接下来正式地记一下java8中的新时间类型:

java8为我们做了很多所以针对上一篇中的Date,我们这样写也是没有问题的:提供一个类型及其格式,放到pool中直接call就可以了

public void testJava8DateTime() throws ExecutionException, InterruptedException {

        DateTimeFormatter dateTimeFormatter ;//= DateTimeFormatter.ISO_LOCAL_DATE  使用默认提供的格式
        dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");//可以自定义格式

        Callable<LocalDate> localDateCallable = new Callable<LocalDate>() {
            @Override
            public LocalDate call() throws Exception {
                return LocalDate.parse("20180909",dateTimeFormatter);//不管什么样的改变,产生全新的实例,安全了
            }
        };

        List<Future<LocalDate>> futureList = new ArrayList<>();

        for (int i = 0; i < 10; i++) {
            futureList.add(executorService.submit(localDateCallable));
        }
        for (Future<LocalDate> localDateFuture : futureList) {
            System.out.println(localDateFuture.get());
        }
        executorService.shutdown();
    }

笔记,知识点的整理

     //日期 LocalDate:year-month-day   LocalTime:hour-minute-second  LocalDateTime:year-month-day-hour-minute-second
        LocalDateTime localDateTime = LocalDateTime.now();// 本地时间
        LocalDateTime localDateTime1 = LocalDateTime.of(2016, 03, 03, 02, 00, 33);//指定时间
        LocalDateTime localDateTime2 = localDateTime.plusYears(2);//加2年
        LocalDateTime localDateTime3 = localDateTime.minusMonths(2);//减2个月
        System.out.println(localDateTime.getYear() + localDateTime.getMonthValue() + localDateTime.getHour());

        //Instant 时间戳(Unix元年:1970.01.01 00:00:00 到某个时间 间的毫秒值
        Instant instant = Instant.now();//默认获取格林尼治时间。8个时区
        OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));//我和格林 偏右8个时区
        instant.toEpochMilli();//转毫秒
        Instant instant1 = Instant.ofEpochSecond(1000);//从元年+1000秒

        //region 间隔  Duration:两个“时间”的间隔    Period:两个“日期”的间隔
        Instant instant2 = Instant.now();
        LocalTime localTime = LocalTime.now();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Instant instant3 = Instant.now();
        LocalTime localTime1 = LocalTime.now();
        Duration.between(instant, instant3).toMillis();//转成毫秒
        Duration.between(localTime, localTime1).toMillis();
        //日期 ——++++++++++++++++++++++++++++++++++++++-----
        LocalDate localDate = LocalDate.of(2016, 01, 04);
        LocalDate localDate1 = LocalDate.now();
        Period.between(localDate, localDate1).getYears();
        //endregion

        //region DateTimeFormatter 格式化时间、日期
        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ISO_DATE;//使用默认提供的格式
        LocalDateTime localDateTime5 = LocalDateTime.now();//现在时间
        String strDate = localDateTime5.format(dateTimeFormatter1);//转格式(时间.format(格式)
        DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss");//指定格式
        strDate = dateTimeFormatter2.format(localDateTime5);//格式.format(时间)

        LocalDateTime newDate = localDateTime5.parse(strDate, dateTimeFormatter2);//时间.parse(要转的时间字符串,格式)
        //endregion

        //region zonedDate   zonedTime  zonedDateTime
        Set<String> set = ZoneId.getAvailableZoneIds();//获取时间信息
        LocalDateTime localDateTime4 = LocalDateTime.now(ZoneId.of("Europe/Tallinn"));//指定时区,获取这个时区的当前时间
        ZonedDateTime zonedDateTime = LocalDateTime.now().atZone(ZoneId.of("\"Europe/Tallinn\""));//带时区的时间日期格式
        //Tallinn时区的时间日期+与Asian/ShangHai相差的时区数+[Asian/ShangHai]
        ZonedDateTime zonedDateTime1 = LocalDateTime.now(ZoneId.of("Europe/Tallinn")).atZone(ZoneId.of("\"Asian/ShangHai\""));
        //endregion
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值