java 8 中的时间、日期处理类

Java 8 引入了全新的日期和时间 API,这个 API 在 java.time 包中。这个 API 的设计目标是更加直观,更加易于使用,同时也包含了更丰富的功能。以下是主要的一些类。

1.LocalDate:这是一个纯日期,没有时间的部分。比如你可以用它来表示一个特定的日子,如 2014-01-14

2.LocalTime:这是一个纯时间,没有日期的部分。比如你可以用它来表示一天中的一个特定时间,如 13:45:20

3.LocalDateTime:这是日期和时间的组合。它既有日期部分,也有时间部分,但是没有时区。

4.ZonedDateTime:这是最完整的日期时间,它包含了日期、时间、时区以及与格林威治或 UTC 的时差。

5.Instant:这是一个时间戳,表示从1970年1月1日(UTC)开始的秒数。

6.Duration:这是两个瞬时时间点之间的时间段,以秒和纳秒为单位。

7.Period:这是两个日期之间的时间段,以年、月和日为单位。

8.ZoneId 和 ZoneOffset:这两个类用于处理时区。

9.DateTimeFormatter:这个类用于日期和时间的格式化和解析。

这些类都是不可变且线程安全的,可以放心使用。

一、支持格式化选项

Java 8 的日期和时间 API 提供了 DateTimeFormatter 类,用于格式化和解析日期和时间。以下是一些主要的格式化选项:

  • 预定义的格式DateTimeFormatter 类提供了一些预定义的格式,例如 ISO_LOCAL_DATE_TIMEISO_LOCAL_DATEISO_LOCAL_TIME 等。

        // 获取当前的日期时间
        LocalDateTime now = LocalDateTime.now();

        // 使用 ISO_LOCAL_DATE_TIME 格式
        DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        String formattedDateTime = now.format(formatter);
        System.out.println(formattedDateTime);  // 输出类似 "2024-01-08T13:18:19.456"

        // 使用 ISO_LOCAL_DATE 格式
        formatter = DateTimeFormatter.ISO_LOCAL_DATE;
        formattedDateTime = now.format(formatter);
        System.out.println(formattedDateTime);  // 输出类似 "2024-01-08"

        // 使用 ISO_LOCAL_TIME 格式
        formatter = DateTimeFormatter.ISO_LOCAL_TIME;
        formattedDateTime = now.format(formatter);
        System.out.println(formattedDateTime);  // 输出类似 "13:18:19.456"
  • 自定义的格式:你可以使用 ofPattern 方法创建自定义的格式。例如,DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") 会创建一个可以将日期时间格式化为 2021-12-31 23:59:59 这样的格式。

        // 获取当前的日期时间
        LocalDateTime now = LocalDateTime.now();

        // 创建一个自定义的格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 使用 formatter 来格式化 LocalDateTime 对象
        String formattedDateTime = now.format(formatter);
        System.out.println(formattedDateTime);  // 输出类似 "2024-01-08 13:18:19"
  • 区域设置:你可以使用 withLocale 方法为 DateTimeFormatter 设置区域设置。这会影响到如何格式化和解析日期和时间。例如,美国和欧洲的日期格式是不同的。

        // 获取当前的日期时间
        LocalDateTime now = LocalDateTime.now();

        // 创建一个自定义的格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMM-dd HH:mm:ss");

        // 使用美国的区域设置来格式化 LocalDateTime 对象
        formatter = formatter.withLocale(Locale.US);
        String formattedDateTime = now.format(formatter);
        System.out.println(formattedDateTime);  // 输出类似 "2024-Jan-08 13:18:19"

        // 使用法国的区域设置来格式化 LocalDateTime 对象
        formatter = formatter.withLocale(Locale.FRANCE);
        formattedDateTime = now.format(formatter);
        System.out.println(formattedDateTime);  // 输出类似 "2024-janv.-08 13:18:19"
  • 格式化:你可以使用 DateTimeFormatter 的 format 方法将日期时间对象格式化为字符串。

        // 获取当前的日期时间
        LocalDateTime now = LocalDateTime.now();

        // 创建一个自定义的格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 使用 formatter 来格式化 LocalDateTime 对象
        String formattedDateTime = now.format(formatter);
        System.out.println(formattedDateTime);  // 输出类似 "2024-01-08 13:18:19"
  • 解析:你可以使用 DateTimeFormatter 的 parse 方法将字符串解析为日期时间对象。

        // 创建一个自定义的格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 使用 formatter 来解析一个日期时间字符串
        String dateTimeString = "2024-01-08 13:18:19";
        LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeString, formatter);
        System.out.println(parsedDateTime);  // 输出类似 "2024-01-08T13:18:19"

二、格式转换

1.Date转换为LocalDate

LocalDate localDate = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

 我们首先创建了一个 Date 对象,然后将它转换为 Instant 对象,接着将 Instant 对象转换为 ZonedDateTime 对象,最后从 ZonedDateTime 对象获取了 LocalDate 对象。

2.LocalDate转换为Date

        // 创建一个 LocalDate 对象
        LocalDate localDate = LocalDate.now();
        // 将 LocalDate 转换为 Date
        Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

我们首先创建了一个 LocalDate 对象,然后将它转换为 LocalDateTime 对象,接着将 LocalDateTime 对象转换为 ZonedDateTime 对象,然后将 ZonedDateTime 对象转换为 Instant 对象,最后将 Instant 对象转换为 Date 对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值