告别Date与Calendar:拥抱现代Java日期时间API

简介: 告别Date与Calendar:拥抱现代Java日期时间API

告别Date与Calendar:拥抱现代Java日期时间API

如果你曾深受Java旧版 DateCalendar 类设计的困扰——例如非线程安全、API设计晦涩、时区处理混乱——那么你并不孤单。自Java 8起,全新的 java.time API(JSR 310)被引入,它彻底改变了我们在Java中处理时间的方式,其核心设计原则是清晰、不可变和线程安全。

核心类:如何选择?

java.time 包提供了几个清晰区分的核心类,选择合适的类是正确使用的第一步:

  1. LocalDate / LocalTime / LocalDateTime

    • 适用场景:不包含时区信息的本地日期、时间或两者结合。例如,生日、会议时间(假定在同一时区)。
    • 示例LocalDate birthday = LocalDate.of(1990, Month.JANUARY, 1);
  2. ZonedDateTime

    • 适用场景:需要明确处理时区的时刻。例如,全球会议的线上开始时间。
    • 示例ZonedDateTime meeting = ZonedDateTime.now(ZoneId.of("America/New_York"));
  3. Instant

    • 适用场景:机器时间,表示时间线上的一个瞬时点(通常是从UTC 1970-01-01T00:00:00Z开始的纳秒)。常用于记录时间戳。
    • 示例Instant timestamp = Instant.now();

最佳实践与示例

  • 1. 立即开始使用 java.time
    对于所有新项目,请完全摒弃旧的 DateCalendar。它们的缺陷已被现代API完美解决。

  • 2. 进行日期运算
    新的API提供了强大且直观的方法进行日期计算。

    LocalDateTime now = LocalDateTime.now();
    // 三天后
    LocalDateTime threeDaysLater = now.plusDays(3);
    // 上个月的最后一天
    LocalDate lastDayOfPreviousMonth = LocalDate.now().minusMonths(1)
                                                 .with(TemporalAdjusters.lastDayOfMonth());
    
  • 3. 格式化与解析
    使用 DateTimeFormatter 替代旧的 SimpleDateFormat,它是线程安全的。

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    String formatted = now.format(formatter); // 格式化
    LocalDateTime parsed = LocalDateTime.parse("2023-10-01 12:00:00", formatter); // 解析
    

总结

java.time API通过其清晰的类型设计和不可变性,极大地简化了日期时间处理,并消除了常见的并发陷阱。花时间熟悉这个现代工具包,你的代码将更加健壮和易于维护。

相关文章
|
4月前
|
Java API 调度
告别阻塞:探索Java 21虚拟线程的威力
告别阻塞:探索Java 21虚拟线程的威力
323 116
|
4月前
|
架构师 Java 程序员
程序员的出路:30岁,我们聊聊那些真实的选择
30岁程序员的迷茫与出路:技术焦虑、薪资倒挂、能力单一困扰着许多人。本文基于真实观察,梳理五条可行路径——深耕技术、理性转管理、务实搞副业、跨界融合、提前布局B计划,并总结三条铁律与自测问题,帮助你在变局中找到方向。出路不在远方,而在你写下的每一行“值钱”的代码里。(238字)
755 117
|
4月前
|
安全 Java API
超越基础:每个Java开发者都应了解的三个现代特性
超越基础:每个Java开发者都应了解的三个现代特性
268 118
|
5月前
|
人工智能 数据安全/隐私保护
如何识别AI生成内容?探秘“AI指纹”检测技术
如何识别AI生成内容?探秘“AI指纹”检测技术
920 119
|
5月前
|
人工智能 自然语言处理 数据安全/隐私保护
AI生成的文本:如何识破机器的“笔迹”?
AI生成的文本:如何识破机器的“笔迹”?
889 85
|
5月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
6432 88
|
4月前
|
Web App开发 网络协议 Java
Windows 终端命令详解:PowerShell 初学者指南
Windows 终端是一个命令行工具,允许用户通过文本命令与系统交互,执行文件管理、系统配置和网络诊断等操作。PowerShell 是 Windows 终端的现代版本,相比传统的命令提示符(CMD),它功能更强大,支持脚本编写和复杂任务处理。本文将以 PowerShell 为主,带你从零开始学习。
692 6
|
4月前
|
人工智能 前端开发 流计算
前端的同学,终于要起飞啦,Github 6.3k star + ,免费可商用的UI元素库!!!
小华同学推荐:galaxy 是一个免费可商用的开源 UI 元素库,收录超 3,000 个组件,支持 CSS 与 Tailwind 双格式,兼容 Figma/React/HTML,助力高效开发与设计协作。
719 7
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
14242 60

热门文章

最新文章