java8时间新特性

一、LocalDate、LocalTime、LocalDateTime介绍
LocalDate、LocalTime、LocalDateTime类的实例是不可变的对象,分别表示使用 ISO-8601 (ISO-8601 日历系统是国际化组织制定的现代化公民的日期和时间的表达法)日历系统的日期、时间、日期和时间。从名称也可以看出来,第一种表示日期 年月日,第二种表示时间 时分秒,第三种表示年月日时分秒。

  • ZoneId: 时区ID,用来确定Instant和LocalDateTime互相转换的规则
  • Instant: 用来表示时间线上的一个点(瞬时)
  • LocalDate: 表示没有时区的日期, LocalDate是不可变并且线程安全的
  • LocalTime: 表示没有时区的时间, LocalTime是不可变并且线程安全的
  • LocalDateTime: 表示没有时区的日期时间, LocalDateTime是不可变并且线程安全的
  • Clock: 用于访问当前时刻、日期、时间,用到时区
  • Duration: 用秒和纳秒表示时间的数量(长短),用于计算两个日期的“时间”间隔
  • Period: 用于计算两个“日期”间隔

其中,LocalDate、LocalTime、LocalDateTime是新API里的基础对象,绝大多数操作都是围绕这几个对象来进行的,有必要搞清楚:

LocalDate : 只含年月日的日期对象
LocalTime :只含时分秒的时间对象
LocalDateTime : 同时含有年月日时分秒的日期对象

1、获取当当前时间

 /**
     * 测试 LocalDate,LocalTime,LocalDateTime
     */
    @Test
    public void testLocalDate(){
        LocalDate localDate = LocalDate.now();   //获取当前年月日
        LocalTime localTime = LocalTime.now(); //获取当前时分秒
        //获取当前日期时间
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println("localDate:"+localDate+"  localTime:"+localTime+" localDateTime:"+localDateTime);
    }

  输出结果:  localDate:2020-07-01  localTime:21:24:19.925 localDateTime:2020-07-01T21:24:19.925

2、对时间进行加减

//获取指定时间
    @Test
    public void testLocalDateTime(){
        LocalDateTime localDateTime = LocalDateTime.of(2020,06,02,12,22,23);
        System.out.println("指定时间:"+localDateTime);
        //对时间进行加减
        LocalDateTime localDateTime1 = localDateTime.plusYears(2);
        System.out.println("指定时间添加2年:"+localDateTime1);

        /**
         * 对日期时间进行加操作,使用 localDateTime.plus***(num)
         * 对日期时间进行减操作,使用 localDateTime.minus***(num)
         * 修改不限于,年、月、日、时、分、秒、纳秒
         */
        LocalDateTime localDateTime2 = localDateTime.plusMonths(2);
        System.out.println("指定时间添加2月:"+localDateTime2);
        
        LocalDateTime localDateTime3 = localDateTime.minusDays(2);
        System.out.println("指定时间减少2天:"+localDateTime3);
    }
指定时间:2020-06-02T12:22:23
指定时间添加2年:2022-06-02T12:22:23
指定时间添加2月:2020-08-02T12:22:23
指定时间减少2天:2020-05-31T12:22:23

对于LocalDate,只有精度大于或等于日的加减,如年、月、日;
对于LocalTime,只有精度小于或等于时的加减,如时、分、秒、纳秒;
对于LocalDateTime,则可以进行任意精度的时间相加减;
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
3、将年、月、日等修改为指定的值,并返回新的日期(时间)对象
其效果与时间日期相加减差不多,如今天是2018-01-13,要想变为2018-01-20有两种方式
a. localDate.plusDays(20L) -> 相加指定的天数
b. localDate.withDayOfYear(20) -> 直接指定到哪一天
在这里插入图片描述
在这里插入图片描述
4、获取日期的年月日周时分
在这里插入图片描述在这里插入图片描述
5、时间日期前后的比较与判断
在这里插入图片描述
6、计算时间、日期间隔
Duration:用于计算两个“时间”间隔
Period:用于计算两个“日期”间隔

//计算两个日期的日期间隔-年月日
LocalDate date1 = LocalDate.of(2018, 2, 13);
LocalDate date2 = LocalDate.of(2017, 3, 12);
//内部是用date2-date1,所以得到的结果是负数
Period period = Period.between(date1, date2);
System.out.println("相差年数 : " + period.getYears());
System.out.println("相差月数 : " + period.getMonths());
System.out.println("相差日数 : " + period.getDays());
//还可以这样获取相差的年月日
System.out.println("-------------------------------");
long years = period.get(ChronoUnit.YEARS);
long months = period.get(ChronoUnit.MONTHS);
long days = period.get(ChronoUnit.DAYS);
System.out.println("相差的年月日分别为 : " + years + "," + months + "," + days);
//注意,当获取两个日期的间隔时,并不是单纯的年月日对应的数字相加减,而是会先算出具体差多少天,在折算成相差几年几月几日的
        
//计算两个时间的间隔
System.out.println("-------------------------------");
LocalDateTime date3 = LocalDateTime.now();
LocalDateTime date4 = LocalDateTime.of(2018, 1, 13, 22, 30, 10);
Duration duration = Duration.between(date3, date4);
System.out.println(date3 + " 与 " + date4 + " 间隔  " + "\n"
        + " 天 :" + duration.toDays() + "\n"
        + " 时 :" + duration.toHours() + "\n"
        + " 分 :" + duration.toMinutes() + "\n"
        + " 毫秒 :" + duration.toMillis() + "\n"
        + " 纳秒 :" + duration.toNanos() + "\n"
        );
//注意,并没有获得秒差的,但既然可以获得毫秒,秒就可以自行获取了

在这里插入图片描述
7、当计算程序的运行时间时,应当使用时间戳Instant
在这里插入图片描述
8、使用自定义格式
在这里插入图片描述在这里插入图片描述
9、自定义转化的格式一定要与日期类型对应

LocalDate只能设置仅含年月日的格式
LocalTime只能设置仅含时分秒的格式
LocalDateTime可以设置含年月日时分秒的格式
在这里插入图片描述
在这里插入图片描述
注:格式的写法必须与字符串的形式一样
2018-01-13 21:27:30 对应 yyyy-MM-dd HH:mm:ss
20180113213328 对应 yyyyMMddHHmmss 否则会报运行时异常!

但要记住:得到的最终结果都是类似2018-01-13T21:27:30的格式,因为在输出LocalDateTime对象时,会调用其重写的toString方法。
在这里插入图片描述
10、将时间日期对象转为格式化后的时间日期对象
在这里插入图片描述在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒二哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值