JDK8时间类Zoneld,ZoneDateTime,DateTimeFormatter,Calender(LocalTime,LocalDate,LocalDateTime),ChronoUnit

为什么要学JDK8新增时间相关类

在这里插入图片描述

JDK8时间

在这里插入图片描述

Zoneld时区

在这里插入图片描述

    public static void main(String[] args) {
        //获取所有地区的时区
        Set<String> zoneIds = ZoneId.getAvailableZoneIds();
        System.out.println(zoneIds);
        System.out.println(zoneIds.size());//1600  个时区


        //获取当前系统默认时区
        ZoneId zoneId1 = ZoneId.systemDefault();
        System.out.println(zoneId1);//Asia/Shanghai




        //获取指定的时区
        ZoneId zoneId2 = ZoneId.of("America/Cuiaba");
        System.out.println(zoneId2);//America/Cuiaba
    }
}

Insant

在这里插入图片描述

    public static void main(String[] args) {
        //获取当前时间的instant对象 标准时间
        Instant instant = Instant.now();
        System.out.println(instant);//2023-10-19T02:42:09.362530600Z

        //2根据(秒 毫秒 纳秒)值获取instant对象
        Instant instant1 = Instant.ofEpochMilli(1000);
        System.out.println(instant1);//1970-01-01T00:00:01Z  因为时1000秒所以时1秒


        Instant instant2 = Instant.ofEpochSecond(1);
        System.out.println(instant2);//1970-01-01T00:00:01Z 传入1秒


        //第一个代表传入的秒数  第二个是纳秒  相加所以是2
        Instant instant3 = Instant.ofEpochSecond(1, 1000000000);
        System.out.println(instant3);//1970-01-01T00:00:02Z


        //3指定时区
        //用static修饰的方法或者变量只能用类名去调用 而没用这个修饰的方法可以创建对象来调用`
        ZonedDateTime zonedDateTime = instant.now().atZone(ZoneId.of("Asia/Shanghai"));
        System.out.println(zonedDateTime);//2023-10-19T10:49:23.408127100+08:00[Asia/Shanghai]
        //instant.now()获取当前时间的Instant对象  atZone(ZoneId.of("Asia/Shanghai"))指定时区



        //4isxxx判断

        Instant instant4 = Instant.ofEpochMilli(1);
        Instant instant5 = Instant.ofEpochMilli(1000);


        //判断下哪个在前哪个在后

        boolean before = instant4.isBefore(instant5);
        System.out.println(before);//判断4是不是在5之前
        //true


        boolean after = instant5.isAfter(instant4);
        System.out.println(after);//true



        //5min往前减少的方法

        Instant instant6 = Instant.ofEpochMilli(5000);
        System.out.println(instant6);//1970-01-01T00:00:05Z
        Instant instant7 = instant6.minusSeconds(2);
        System.out.println(instant7);//上面减去2秒 所以结果为1970-01-01T00:00:03Z

用static修饰的方法或者变量只能用类名去调用 而没用这个修饰的方法可以创建对象来调用

ZoneDateTime

在这里插入图片描述
原理同上相同 但是ZoneDateTime获取的时间是带时区的
在这里插入图片描述
在这里插入图片描述

日期指定格式类DateTimeFormatter

在这里插入图片描述

    public static void main(String[] args) {
        //获取事件对象

        ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));

        //解析格式化  变成想要的格式
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss EE a");//ee代表星期  a代表上午下午


        //格式化
        System.out.println(dateTimeFormatter.format(zonedDateTime));
        //按照自己设置的格式打印
        //2023-10-19 11:24:39 周四 上午

Calender

LocalTime,LocalDate,LocalDateTime

在这里插入图片描述

LocalTime只能获取时分秒
LocalDate只能获取年月日
LocalDateTime获取年月日和时分秒

LocalDateTime可以转化为另外两个如下图
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以下为LocalDate
在这里插入图片描述
在这里插入图片描述
这个更适用于精确时间的 比如秒杀软件
以下为LocalDateTime
在这里插入图片描述
在这里插入图片描述

工具类

Duration 时间间隔(秒纳秒)

Perido(年月日)

    public static void main(String[] args) {
        //获取当前的年月日
        LocalDate today = LocalDate.now();
        System.out.println(today);

        LocalDate dateTime = LocalDate.of(2000, 1, 1);
        //这个是指定的时间


        //然后把两个相减 年月日
        //用Perido

        Period period = Period.between(dateTime, today);
        //第二个参数减去第一个参数

        System.out.println("时间间隔为:"+period);

        System.out.println(period.getYears());//间隔年
        System.out.println(period.getMonths());
        System.out.println(period.getDays());


        //获取间隔总月数
        System.out.println(period.toTotalMonths());
        //285个月

ChronoUnit(所有单位) 重点掌握

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值