JAVA8新特性学习记录(四) 新时间日期API

传统时间格式化的线程安全问题

问题
解决方式
–暂放

新时间内日期API

使用LocalDate,LocalTime,LocalDateTime
实例是不可变对象,分别表示使用ISO-8601日历系统的时日期,时间,日期和时间。他们提供了简单的日期或时间,并不包含当前的事件信息。也不包含与时区相关的信息。
注:ISO-8601日历系统是国际标准化组织定制的现代公民的日期和时间表示法

		//1.LocalDate LocalTime LocalDateTime
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);

        LocalDateTime ldt2 = LocalDateTime.of(2021,8,15,21,21,17);
        System.out.println(ldt2);

        LocalDateTime ldt3 = ldt.plusYears(2);
        System.out.println(ldt3);

        LocalDateTime ldt4 = ldt.minusMonths(2);
        System.out.println(ldt4);

        //2.Instant: 时间戳(以1970年1月1日 00:00:00 到某个时间之间的毫秒odt
        Instant in = Instant.now(); //默认UTC时区
        System.out.println(in);

        //加8小时
        OffsetDateTime odt = in.atOffset(ZoneOffset.ofHours(8));
        System.out.println(odt);

        //毫秒值
        long l = in.toEpochMilli();
        System.out.println(l);

        //3.
        //Duration : 计算两个时间之间的间隔
        Instant ins1 = Instant.now();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Instant ins2 = Instant.now();
        Duration duration = Duration.between(ins1,ins2);
        System.out.println(duration.toMillis());

        //Period : 计算两个 日期 之间的 间隔
        LocalDate localDate1 =  LocalDate.of(1995,10,1);
        LocalDate now = LocalDate.now();

        Period between = Period.between(localDate1, now);

        System.out.println(between);
        System.out.println(between.getYears());
        System.out.println(between.getMonths());
        System.out.println(between.getDays());

时间校正器

日期的操作
TemporalAdjuster: 有时需要获取例如:下个周日等操作。
TemporalAdjusters:该类通过静态方法提供了大量的常用TemporalAdjuster的实现

        LocalDateTime ldt = LocalDateTime.now();
        LocalDateTime ldt2 = ldt.withDayOfMonth(10);
        System.out.println(ldt);
        System.out.println(ldt2);

        //下一个周五
        LocalDateTime with = ldt.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
        System.out.println(with);

        //自定义:下一个工作日
        LocalDateTime ldt3 = ldt.with((l) -> {
            LocalDateTime ld = (LocalDateTime) l;

            DayOfWeek dow = ld.getDayOfWeek();
            if (dow.equals(DayOfWeek.FRIDAY)) {
                //周五加三天
                return ld.plusDays(3);
            } else if (dow.equals(DayOfWeek.SATURDAY)) {
                //周六加两天
                return ld.plusDays(2);
            } else {
                return ld.plusDays(1);
            }
        });
        System.out.println(ldt3);

时间格式化与时区的处理

        //格式化
        DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
        LocalDateTime ldt = LocalDateTime.now();

        String strDate = ldt.format(dtf);
        System.out.println(strDate);
        System.out.println(ldt);


        DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
        String format = ldt.format(dtf2);
        System.out.println(format);


        //时区
        //ZoneDate,ZoneTime,ZoneDateTime
        Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
        availableZoneIds.forEach(System.out::println);

        LocalDateTime localDateTime = LocalDateTime.now(ZoneId.of("Etc/GMT+8"));
        System.out.println(localDateTime);

        LocalDateTime ldt2 = LocalDateTime.now();
        ZonedDateTime zonedDateTime = ldt2.atZone(ZoneId.of("America/Toronto"));
        System.out.println(zonedDateTime);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值