Java.time工具类的使用

Java 8的日期和时间类包含 LocalDate、LocalTime、Instant、Duration 以及 Period,这些类都包含在 java.time 包中,Java 8 新的时间API的使用方式,包括创建、格式化、解析、计算、修改。

LocalDate 只会获取年月日

 public static void main(String[] args) {
        //获取当前年月日
        LocalDate localDate = LocalDate.now();
        //获取年份
        int year = localDate.getYear();
        int year1 = localDate.get(ChronoField.YEAR);
        //获取月份(英文)
        Month month = localDate.getMonth();
        //获取月份(阿拉布数字)
        int i = localDate.get(ChronoField.MONTH_OF_YEAR);
        //今天是几号
        int dayOfMonth = localDate.getDayOfMonth();
        //今天周几
        DayOfWeek dayOfWeek = localDate.getDayOfWeek();
        //今天是今年的第几天
        int dayOfYear = localDate.getDayOfYear();
    }

 

LocalTime 只会获取时分秒

        //获取当前时分秒
        LocalTime localTime = LocalTime.now();
        //获取当前小时
        int hour = localTime.getHour();
        int hour1 = localTime.get(ChronoField.CLOCK_HOUR_OF_DAY);
        //获取当前分钟
        int minute = localTime.getMinute();
        int minute1 = localTime.get(ChronoField.MINUTE_OF_HOUR);
        //获取当前秒数
        int second = localTime.getSecond();
        int second1 = localTime.get(ChronoField.SECOND_OF_MINUTE);

LocalDateTime 获取年月日时分秒,相当于 LocalDate + LocalTime

        //获取当前时间的年月日时分秒
        LocalDateTime localDateTime = LocalDateTime.now();
        LocalDateTime localDateTime1 = LocalDateTime.of(localDate, localTime);
        LocalDateTime localDateTime2 = localDate.atTime(localTime);
        LocalDateTime localDateTime3 = localTime.atDate(localDate);
        //获取指定时间的年月日时分秒
        LocalDateTime localDateTime4 = LocalDateTime.of(2021, Month.OCTOBER, 10, 14, 17, 56);
        //获取年份
        int year = localDateTime.getYear();
        int year1 = localDateTime.get(ChronoField.YEAR);
        //获取月份(英文)
        Month month = localDateTime1.getMonth();
        //获取月份(阿拉伯数字)
        int month1 = localDateTime1.get(ChronoField.MONTH_OF_YEAR);
        //获取今天是今年的第几天
        int dayOfYear = localDateTime2.getDayOfYear();
        //获取今天是几号
        int dayOfMonth = localDateTime3.getDayOfMonth();
        //获取今天是周几
        DayOfWeek dayOfWeek = localDateTime4.getDayOfWeek();

Instant 获取秒数,用于表示一个时间戳(精确到纳秒)

        //创建 instant 对象
        Instant instant = Instant.now();
        //1970-01-01T00:00:00Z 到现在的秒数
        long currentSecond = instant.getEpochSecond();
        //1970-01-01T00:00:00Z 到现在的毫秒数
        long currentMilli = instant.toEpochMilli();
        //获取从秒开始后沿时间线的纳秒数。纳秒-秒值度量从getEpochSecond返回的秒开始的纳秒总数.但不超过999,999,999
        int nano = instant.getNano();

Duration 表示一个时间段

        //定义开始时间和结束时间
        LocalDateTime from = LocalDateTime.of(1998, 4, 8,0,0,0);
        LocalDateTime to = LocalDateTime.of(2021, 10, 8,0,0,0);
        //只支持 ’秒‘ 时间单位
        Duration between = Duration.between(from, to);
        //这段时间的总天数
        long days = between.toDays();
        //这段时间的总小时数
        long hours = between.toHours();
        //这段时间的总分钟数
        long minutes = between.toMinutes();
        //这段时间的总秒数
        long seconds = between.getSeconds();
        //这段时间的毫秒数
        long millis = between.toMillis();
        //这段时间的纳秒数
        long nanos = between.toNanos();

修改 LocalDate、LocalTime、LocalDateTime、Instant。

LocalDate、LocalTime、LocalDateTime、Instant 为不可变对象,修改这些对象对象会返回一个副本。

增加、减少年数、月数、天数等,以LocalDate为例:

        LocalDate localDate = LocalDate.of(2000,3,1);
        //修改年份(增加)
        localDate = localDate.plusYears(2); //2002年
        localDate = localDate.plus(1, ChronoUnit.YEARS);  //2003年
        //修改月份(减少)
        localDate = localDate.minusMonths(1); //2003-2
        localDate = localDate.minus(2,ChronoUnit.MONTHS); //2002-12

        // 通过with修改某些值
        // 修改年为2020
        localDate = localDate.withYear(2020);
        localDate = localDate.with(ChronoField.YEAR, 2020);
        // 时间计算
        // 获取该年的第一天
        LocalDate localDate1 = localDate.with(firstDayOfYear());
        //  获取该年的最后一天
        LocalDate localDate2 = localDate.with(lastDayOfYear());

TemporalAdjusters 包含许多静态方法,可以直接调用,以下列举一些:

方法名描述
dayOfWeekInMonth返回同一个月中每周的第几天
firstDayOfMonth返回当月的第一天
firstDayOfNextMonth返回下月的第一天
firstDayOfNextYear返回下一年的第一天
firstDayOfYear返回本年的第一天
firstInMonth返回同一个月中第一个星期几
lastDayOfMonth返回当月的最后一天
lastDayOfNextMonth返回下月的最后一天
lastDayOfNextYear返回下一年的最后一天
lastDayOfYear返回本年的最后一天
lastInMonth返回同一个月中最后一个星期几
next / previous返回后一个/前一个给定的星期几
nextOrSame / previousOrSame返回后一个/前一个给定的星期几,如果这个值满足条件,直接返回

演示一下用法

// 当前时间为2019-09-01 11:17:24

// 2019-09-01
LocalDate.now().with(TemporalAdjusters .firstDayOfMonth());
// 2019-01-01T11:17:24.070
LocalDateTime.now().with(TemporalAdjusters .firstDayOfYear());

格式化时间

LocalDate localDate = LocalDate.of(2019, 9, 12);
String s1 = localDate.format(DateTimeFormatter.BASIC_ISO_DATE);
String s2 = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
// 自定义格式化
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String s3 = localDate.format(dateTimeFormatter);

解析时间

LocalDate localDate1 = LocalDate.parse("20190912", DateTimeFormatter.BASIC_ISO_DATE);
LocalDate localDate2 = LocalDate.parse("2019-09-12", DateTimeFormatter.ISO_LOCAL_DATE);

总结

  1. 和 SimpleDateFormat 相比,DateTimeFormatter 是线程安全的。
  2. Instant 的精确度更高,可以精确到纳秒级。
  3. Duration 可以便捷得到时间段内的天数、小时数等。
  4. LocalDateTime 能够快速地获取年、月、日、下一月等。
  5. TemporalAdjusters 类中包含许多常用的静态方法,避免自己编写工具类。

原文章地址:为什么不建议使用Date,而是使用Java8新的时间和日期API?_小识的博客-CSDN博客介绍在Java 8之前,所有关于时间和日期的API都存在各种使用方面的缺陷,因此建议使用新的时间和日期API,分别从旧的时间和日期的API的缺点以及解决方法、Java 8 新的时间和日期API进行讲解。旧的时间和日期的API的缺陷Java 的 java.util.Date 和 java.util.Calendar 类易用性差,不支持时区,而且都不是线程安全的。Date如果不格式化,打印出...https://blog.csdn.net/zzti_erlie/article/details/100849192

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值