Java新的日期与时间API:简化日期和时间的处理!

举报
喵手 发表于 2025/06/09 17:54:31 2025/06/09
【摘要】 开篇语哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,...

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

开篇

在Java 8中,Java引入了全新的日期与时间API(java.time包),这使得日期和时间的处理变得更加简洁、易用,并且避免了传统的DateCalendar类的一些设计缺陷。新的API采用了不可变对象,提供了对日期和时间的更精确控制。

今天,我们将重点介绍LocalDateLocalTimeLocalDateTime的使用,PeriodDuration类的操作,帮助你更高效地处理日期和时间数据。

前言

处理日期和时间是Java编程中的一个常见需求,尤其是在涉及到时间计算、数据分析或事件调度时。Java 8引入的java.time包提供了一套新的API,它更加直观、易于使用,并且支持线程安全。我们将通过实例来展示如何使用新的日期与时间API来处理日期和时间的常见操作。

第一部分:LocalDateLocalTimeLocalDateTime的使用

1.1 LocalDate:表示日期(无时间)

LocalDate类表示一个日期,不包含时间部分,适用于只关心日期的操作,比如日期计算、获取当前日期等。

示例:使用LocalDate

import java.time.LocalDate;

public class LocalDateExample {
    public static void main(String[] args) {
        // 获取当前日期
        LocalDate today = LocalDate.now();
        System.out.println("Today's date: " + today);  // 输出:2025-05-19

        // 创建特定日期
        LocalDate specificDate = LocalDate.of(2023, 5, 19);
        System.out.println("Specific date: " + specificDate);  // 输出:2023-05-19

        // 获取日期的年、月、日
        System.out.println("Year: " + today.getYear());  // 输出:2025
        System.out.println("Month: " + today.getMonth());  // 输出:MAY
        System.out.println("Day of Month: " + today.getDayOfMonth());  // 输出:19
    }
}

解释:

  • LocalDate.now() 返回当前日期。
  • LocalDate.of(year, month, day) 创建一个特定日期。

1.2 LocalTime:表示时间(无日期)

LocalTime表示一天中的时间(时、分、秒、纳秒),不包括日期部分。适用于需要进行时间计算或获取当前时间的场景。

示例:使用LocalTime

import java.time.LocalTime;

public class LocalTimeExample {
    public static void main(String[] args) {
        // 获取当前时间
        LocalTime now = LocalTime.now();
        System.out.println("Current time: " + now);  // 输出:例如 14:30:15.123456

        // 创建特定时间
        LocalTime specificTime = LocalTime.of(14, 30, 0);
        System.out.println("Specific time: " + specificTime);  // 输出:14:30

        // 获取时间的小时、分钟、秒
        System.out.println("Hour: " + now.getHour());  // 输出:14
        System.out.println("Minute: " + now.getMinute());  // 输出:30
        System.out.println("Second: " + now.getSecond());  // 输出:15
    }
}

解释:

  • LocalTime.now() 返回当前时间。
  • LocalTime.of(hour, minute, second) 创建一个特定时间。

1.3 LocalDateTime:表示日期和时间

LocalDateTime结合了LocalDateLocalTime,同时包含日期和时间,不涉及时区。适用于需要同时处理日期和时间的场景。

示例:使用LocalDateTime

import java.time.LocalDateTime;

public class LocalDateTimeExample {
    public static void main(String[] args) {
        // 获取当前日期和时间
        LocalDateTime now = LocalDateTime.now();
        System.out.println("Current date and time: " + now);  // 输出:例如 2025-05-19T14:30:15.123456

        // 创建特定日期和时间
        LocalDateTime specificDateTime = LocalDateTime.of(2023, 5, 19, 14, 30);
        System.out.println("Specific date and time: " + specificDateTime);  // 输出:2023-05-19T14:30

        // 获取日期和时间的各个部分
        System.out.println("Year: " + now.getYear());  // 输出:2025
        System.out.println("Month: " + now.getMonth());  // 输出:MAY
        System.out.println("Day of Month: " + now.getDayOfMonth());  // 输出:19
        System.out.println("Hour: " + now.getHour());  // 输出:14
        System.out.println("Minute: " + now.getMinute());  // 输出:30
    }
}

解释:

  • LocalDateTime.now() 返回当前日期和时间。
  • LocalDateTime.of(year, month, day, hour, minute) 创建一个特定日期和时间。

第二部分:PeriodDuration类的操作

2.1 Period类:表示日期间隔

Period类用于表示两个LocalDate对象之间的日期差异,通常表示年、月、日之间的差异。

示例:使用Period

import java.time.LocalDate;
import java.time.Period;

public class PeriodExample {
    public static void main(String[] args) {
        LocalDate startDate = LocalDate.of(2020, 1, 1);
        LocalDate endDate = LocalDate.of(2025, 5, 19);

        // 计算日期差异
        Period period = Period.between(startDate, endDate);
        System.out.println("Period: " + period);  // 输出:P5Y4M18D
        System.out.println("Years: " + period.getYears());  // 输出:5
        System.out.println("Months: " + period.getMonths());  // 输出:4
        System.out.println("Days: " + period.getDays());  // 输出:18
    }
}

解释:

  • Period.between(startDate, endDate) 计算两个日期之间的差异,返回一个Period对象。
  • getYears()getMonths()getDays()分别返回年、月、日的差异。

2.2 Duration类:表示时间间隔

Duration类用于表示两个LocalTimeLocalDateTime对象之间的时间差异,通常表示秒和纳秒之间的差异。

示例:使用Duration

import java.time.LocalTime;
import java.time.Duration;

public class DurationExample {
    public static void main(String[] args) {
        LocalTime startTime = LocalTime.of(14, 30);
        LocalTime endTime = LocalTime.of(16, 45);

        // 计算时间差异
        Duration duration = Duration.between(startTime, endTime);
        System.out.println("Duration: " + duration);  // 输出:PT2H15M
        System.out.println("Hours: " + duration.toHours());  // 输出:2
        System.out.println("Minutes: " + duration.toMinutes());  // 输出:135
    }
}

解释:

  • Duration.between(startTime, endTime) 计算两个时间之间的差异,返回一个Duration对象。
  • toHours()toMinutes()分别返回时间差异的小时数和分钟数。

第三部分:PeriodDuration的区别

  • Period:用于计算LocalDate之间的差异,通常表示年、月、日之间的差异。
  • Duration:用于计算LocalTimeLocalDateTime之间的差异,通常表示秒和纳秒之间的差异。

在实际应用中,选择使用Period还是Duration取决于数据类型:如果是日期(LocalDate),使用Period;如果是时间(LocalTimeLocalDateTime),使用Duration


总结

Java新的日期与时间API(java.time包)提供了更清晰、更高效的日期和时间处理方式。通过使用LocalDateLocalTimeLocalDateTime,我们可以方便地操作日期和时间;PeriodDuration类使得日期和时间的差异计算变得更加简单。

这套API设计简洁、灵活,解决了旧版DateCalendar类的一些问题,使得日期和时间的处理更加直观和高效。在日常开发中,掌握这些工具将极大地提高代码的可维护性和效率。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。


版权声明:本文由作者原创,转载请注明出处,谢谢支持!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。