前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java日期时间处理:DateTimeFormatter、LocalDate与LocalDateTime、Duration实践

Java日期时间处理:DateTimeFormatter、LocalDate与LocalDateTime、Duration实践

原创
作者头像
Yeats_Liao
发布2025-01-02 12:11:41
发布2025-01-02 12:11:41
1.9K0
举报

在现代 Java 开发中,精确高效处理日期和时间是构建高质量应用关键。本文探讨 Java 8 新型日期时间 API,包括 DateTimeFormatter 格式化与解析、LocalDate 和 LocalDateTime 操作及 Duration 时间间隔计算。通过代码示例与场景分析,助读者掌握并应用于实际项目。

1. DateTimeFormatter:日期时间的格式化与解析

java.time.format.DateTimeFormatter是 Java 8 新增工具,用于日期时间对象与字符串转换。创建方式:解析日期时间字符串可用parse方法。日期部分:yyyy是年份,MM是月份,dd是日期,EEEE是星期全称。时间部分:HH是 24 小时制小时,hh是 12 小时制小时,mm是分钟,ss是秒,SSS是毫秒。

代码语言:java
复制
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class DateTimeFormatterExample {
    public static void main(String[] args) {
        // 创建一个日期对象
        LocalDate date = LocalDate.of(2024, 1, 24);

        // 创建一个日期格式器
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        // 使用格式器将日期对象转换为字符串
        String formattedDate = date.format(formatter);
        System.out.println("Formatted Date: " + formattedDate); // 输出:2024-01-24

        // 解析字符串为日期对象
        LocalDate parsedDate = LocalDate.parse("2023-07-15", formatter);
        System.out.println("Parsed Date: " + parsedDate); // 输出:2023-07-15
    }
}

2. LocalDate与LocalDateTime:操作日期与日期时间

LocalDate类是 Java 8 的java.time包下表示日期的类,不可变且线程安全,适用于仅处理日期场景。创建方式有:用now()获取当前日期;of()指定年、月、日创建;从符合 ISO-8601 标准的字符串解析。常用方法:获取日期各部分,如年份、月份等;比较和运算日期,可用equals()isBefore()isAfter()plusDays()minusMonths()等方法。

LocalDateTime在 Java 8 的java.time包中,表日期和时间,无时区概念,不可变且线程安全,适用于交易、系统日志等场景。创建方式有now()获取当前时间、of()指定创建、从字符串解析(先创建DateTimeFormatter再用parse())。常用方法有获取日期和时间各部分、用plus()minus()系列方法调整、支持DateTimeFormatter格式化和解析。

代码语言:java
复制
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class LocalDateAndLocalDateTimeExample {
    public static void main(String[] args) {
        // 创建一个LocalDate对象
        LocalDate date = LocalDate.of(2024, 1, 24);

        // 创建一个LocalTime对象
        LocalTime time = LocalTime.of(14, 30);

        // 将LocalDate和LocalTime组合成LocalDateTime
        LocalDateTime dateTime = LocalDateTime.of(date, time);
        System.out.println("LocalDateTime: " + dateTime); // 输出:2024-01-24T14:30

        // 获取当前日期和时间
        LocalDateTime now = LocalDateTime.now();
        System.out.println("Current LocalDateTime: " + now);
    }

    // 获取两个日期之间的天数差
    public static long daysBetween(LocalDate startDate, LocalDate endDate) {
        return ChronoUnit.DAYS.between(startDate, endDate);
    }
}

// 使用示例:
long daysApart = daysBetween(LocalDate.of(2023, 1, 1), LocalDate.of(2023, 12, 31));
System.out.println("Days apart: " + daysApart);

3. Duration:时间间隔的计算

java.time.Duration类是 Java 8 引入,用于表示时间间隔,以秒和纳秒为基本单位,可处理从纳秒到天范围,对象不可变。创建方式有:用of系列静态方法,如ofSeconds等;用between方法获取两个时间对象持续时间;用parse方法解析符合 ISO 8601 标准格式字符串为Duration对象。

代码语言:java
复制
import java.time.Duration;
import java.time.LocalDateTime;

public class DurationExample {
    public static void main(String[] args) {
        // 获取两个LocalDateTime之间的时间差
        LocalDateTime start = LocalDateTime.of(2024, 1, 1, 9, 0);
        LocalDateTime end = LocalDateTime.of(2024, 1, 1, 11, 30);

        // 计算两个日期时间之间的持续时间
        Duration duration = Duration.between(start, end);
        System.out.println("Duration: " + duration); // 输出:PT2H30M

        // 获取总小时数
        long hours = duration.toHours();
        System.out.println("Hours: " + hours); // 输出:2

        // 获取剩余的分钟数
        int minutes = duration.toMinutes() % 60;
        System.out.println("Minutes: " + minutes); // 输出:30
    }
}

4. 区别总结

  • DateTimeFormatter 用于日期和时间的字符串格式化与解析,应用于数据持久化、用户界面展示等。
  • LocalDateLocalDateTime 分别存储和操作日期及日期时间,适用于业务逻辑中的日期时间运算。
  • Duration 专注于计算两个时间点间的时间间隔,在衡量任务执行时间、计费周期计算、计划调度等领域有用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. DateTimeFormatter:日期时间的格式化与解析
  • 2. LocalDate与LocalDateTime:操作日期与日期时间
  • 3. Duration:时间间隔的计算
  • 4. 区别总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档