jdk8新增时间类

 相对于JDK8之前的日期对象,JDK8新增的日期对象具有以下优点:

  1. 线程安全的对象   每次操作都会返回一个新的对象,不会修改原对象
  2. 丰富的API           获取所需信息更方便
  3. 时间更精确          之前的日期对象只能精确到毫秒,新增的日期对象时间精确到纳秒

 温馨提示,如需测试代码,直接拉到最后。

LocalDateTime

LocalDateTime的使用频率最高,API也最丰富,基本上是LocalDate和LocalTime的API的和。

创建对象(of方法)

1、获取当前的日期时间对象

LocalDateTime localDateTime = LocalDateTime.now()

2、由LocalDate、LocalTime得到LocalDateTime

LocalDateTime.of(now, localTime)

3、指定年月日时分秒信息创建对象

LocalDateTime.of(2022, 2, 10, 15, 21, 14)

4、使用parse方法,将已有的时间转为对象 

LocalDateTime.parse("20220916 10:16", DateTimeFormatter.ofPattern("yyyyMMdd HH:mm"));

读取对象的信息(getXXX方法)

可通过getXXX方法,分别获取年月日、时分秒、纳秒信息

 System.out.println("year:" + localDateTime.getYear());
 System.out.println("monthVaule:" + localDateTime.getMonthValue());
 System.out.println("hour:" + localDateTime.getHour());
 System.out.println("nanoTime:" + localDateTime.getNano());

 修改时间信息(withXXX、plusXXX、minusXXX)

LocalDateTime addLocalDateTime = localDateTime.plusYears(1);
LocalDateTime subLocalDateTime = localDateTime.minusHours(10);
System.out.println("修改月:" + subLocalDateTime.withMinute(1));
System.out.println("修改分钟:" + subLocalDateTime.withMinute(50));

比较时间(isBefore、isAfter、compareTo) 

subLocalDateTime.isBefore(addLocalDateTime); // true
subLocalDateTime.isAfter(addLocalDateTime)); // false
subLocalDateTime.compareTo(addLocalDateTime)) // -1

Instant 

时间戳,可替代System.currentTimeMillis()方法。一般用来做程序执行的计时。Instant同样支持一些getXXX、plusXXX、minsXXX、isBefore、isAfter、compareTo方法

获取对象

Instant.now()

 DateTimeFormatter

 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
 LocalDateTime localDateTime = LocalDateTime.now();
 System.out.println("正向格式化当前日期:" + localDateTime.format(dateTimeFormatter));
 System.out.println("反向格式化当前日期:" + dateTimeFormatter.format(localDateTime));

Period

Period仅可以计算LocalDate的日期差,且日期的差值需按照年、月、日使用getXXX分别去获取。

如下代码,运行后,结果返回1,而不能返回366,使用起来较为繁琐

// 1、获取对象
LocalDate date1 = LocalDate.of(2022, 8, 30);
LocalDate date2 = LocalDate.of(2023, 8, 31);
Period period = Period.between(date1, date2);
// 2、常用方法 getXXX
System.out.println("日期相差天数:" + period.getDays());

Duration

用于计数时间间隔,与Period相比,使用更多,API也更方便。

Duration支持LocalDateTime,Instance、LocalTime。可以使用toXXX方法,将差值转为指定的时间单位,较为常用。

// 1、获取对象
LocalDateTime dateTime1 = LocalDateTime.of(2022, 8, 30,10,0,0);
LocalDateTime dateTime2 = LocalDateTime.of(2023, 8, 31,10,0,0); Duration duration = Duration.between(dateTime1, dateTime2);
// 2、常用方法 toXXX
System.out.println("相差秒数:" + duration.toSeconds());
System.out.println("相差小时数:" + duration.toHours());

全部测试代码

/* 
 * @description:JDK8新增的时间日期类
 */
public class TestJDK8DateTime {
    public static void main(String[] args) {
        System.out.println("------------LocalDate-------------");
        // LocalDate
        // 1、获取对象
        LocalDate now = LocalDate.now();
        System.out.println("now:" + now);
        LocalDate ofDate = LocalDate.of(2023, 8, 31);
        System.out.println(ofDate);

        // 2、读取对象的信息
        System.out.println("year:" + ofDate.getYear());
        System.out.println("month:" + ofDate.getMonth());
        System.out.println("monthValue:" + ofDate.getMonthValue());
        // 3、加减操作(操作后会返回新的对象)
        LocalDate addDate = now.plusDays(1);
        LocalDate subDate = now.minusYears(1);
        System.out.println("addDate:" + addDate);
        System.out.println("subDate:" + subDate);
        // 4、修改(操作后会返回新的对象)
        System.out.println("修改年:" + now.withYear(2053));

        // 5、比较
        System.out.println("addDate.compareTo(subDate) = " + addDate.compareTo(subDate));

        System.out.println("-----------LocalTime--------------");
        // LocalTime 时间精确到纳秒
        // 1、获取对象
        LocalTime localTime = LocalTime.now();
        System.out.println("localTime:" + localTime);
        System.out.println(LocalTime.of(14, 20, 12));
        // 2、读取对象的信息
        System.out.println("hour:" + localTime.getHour());
        System.out.println("nanoTime:" + localTime.getNano());
        // 3、加减操作(操作后会返回新的对象)
        LocalTime addTime = localTime.plusHours(1);
        LocalTime subTime = localTime.minusMinutes(10);
        System.out.println("addTime:" + addTime);
        System.out.println("subTime:" + subTime);
        // 4、修改(操作后会返回新的对象)
        System.out.println("修改分钟:" + localTime.withMinute(50));
        // 比较
        System.out.println("addTime.compareTo(subTime) = " + addTime.compareTo(subTime));

        System.out.println("-----------LocalDateTime--------------");
        // LocalDateTime(最常用,API方法基本等于LocalDate的方法+LocalTime的方法)
        // 1、获取对象
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println("localDateTime:" + localDateTime);
        System.out.println(LocalDateTime.of(now, localTime)); // 由LocalDate、LocalTime得到LocalDateTime
        System.out.println(LocalDateTime.of(2022, 2, 10, 15, 21, 14));
        System.out.println(LocalDateTime.parse("20220916 10:16", DateTimeFormatter.ofPattern("yyyyMMdd HH:mm")));
        // 2、读取对象的信息
        System.out.println("year:" + localDateTime.getYear());
        System.out.println("monthVaule:" + localDateTime.getMonthValue());
        System.out.println("hour:" + localDateTime.getHour());
        System.out.println("nanoTime:" + localDateTime.getNano());
        // 3、加减操作(操作后会返回新的对象)
        LocalDateTime addLocalDateTime = localDateTime.plusYears(1);
        LocalDateTime subLocalDateTime = localDateTime.minusHours(10);
        System.out.println("addLocalDateTime:" + addTime);
        System.out.println("subLocalDateTime:" + subTime);
        // 4、修改(操作后会返回新的对象)
        System.out.println("修改月:" + subLocalDateTime.withMinute(1));
        System.out.println("修改分钟:" + subLocalDateTime.withMinute(50));
        // 5、比较
        System.out.println("subLocalDateTime.isBefore(addLocalDateTime):" + subLocalDateTime.isBefore(addLocalDateTime));
        System.out.println("subLocalDateTime.isAfter(addLocalDateTime):" + subLocalDateTime.isAfter(addLocalDateTime));
        System.out.println("subLocalDateTime.compareTo(addLocalDateTime) = " + subLocalDateTime.compareTo(addLocalDateTime));

        // ZoneId、ZonedDateTime
        System.out.println("-----------ZoneId--------------");
        System.out.println("getAvailableZoneIds:" + ZoneId.getAvailableZoneIds());
        System.out.println("systemDefaultZoneID:" + ZoneId.systemDefault());

        System.out.println("-----------ZonedDateTime--------------");
        ZonedDateTime zonedDateTime = ZonedDateTime.now();
        ZoneId zone = zonedDateTime.getZone();
        System.out.println("zone:" + zone);


        // DateTimeFormatter
        System.out.println("-----------DateTimeFormatter--------------");
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        System.out.println("正向格式化当前日期:" + localDateTime.format(dateTimeFormatter));
        System.out.println("反向格式化当前日期:" + dateTimeFormatter.format(localDateTime));

        // Period (计算两个LocalDate对象的差,计算结果中,年、月、日的差值需要分别获取,使用较少。)
        System.out.println("-----------Period--------------");
        // 1、获取对象
        LocalDate date1 = LocalDate.of(2022, 8, 30);
        LocalDate date2 = LocalDate.of(2023, 8, 31);
        Period period = Period.between(date1, date2);
        // 2、常用方法 getXXX
        System.out.println("日期相差天数:" + period.getDays());

        // Duration(计算两个时间对象的差,支持LocalDateTime,Instance、LocalTime。可以使用toXXX方法,将差值转为指定的时间单位,较为常用)
        System.out.println("-----------Duration--------------");
        // 1、获取对象
        LocalDateTime dateTime1 = LocalDateTime.of(2022, 8, 30,10,0,0);
        LocalDateTime dateTime2 = LocalDateTime.of(2023, 8, 31,10,0,0);
        Duration duration = Duration.between(dateTime1, dateTime2);
        // 2、常用方法 toXXX
        System.out.println("相差秒数:" + duration.toSeconds());
        System.out.println("相差小时数:" + duration.toHours());


    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值