当前位置: 首页 > news >正文

Java处理时间-java.time

在 Java 中,处理日期和时间的类经历了重大演进。根据你使用的 Java 版本不同,推荐使用不同的 API。以下是全面、清晰、现代的 Java 时间处理类总结(截至 Java 21):


✅ 推荐:Java 8+ 使用java.time包(JSR-310)—— 现代、线程安全、易用

这是目前最推荐的方式,设计优秀,避免了旧 API 的诸多坑。

核心类概览

用途示例
LocalDateTime不带时区的日期+时间(如:2026-02-09T17:30:45)业务日志、本地事件
LocalDate仅日期(如:2026-02-09)生日、节假日
LocalTime仅时间(如:17:30:45)营业时间、闹钟
ZonedDateTime带时区的完整时间(如:2026-02-09T17:30:45+08:00[Asia/Shanghai])全球应用、跨时区调度
Instant时间戳(UTC,从 1970-01-01T00:00:00Z 开始的纳秒数)系统日志、数据库存储
Duration两个时间点之间的时间量(如:2 小时 30 分)计时、间隔
Period两个日期之间的日期量(如:1 年 2 个月)年龄、合同周期
DateTimeFormatter格式化与解析(替代SimpleDateFormat"yyyy-MM-dd HH:mm:ss"

📌 常用示例(Java 8+)

importjava.time.*;importjava.time.format.DateTimeFormatter;publicclassModernTimeExample{publicstaticvoidmain(String[]args){// 1. 获取当前时间(系统默认时区)LocalDateTimenow=LocalDateTime.now();LocalDatetoday=LocalDate.now();ZonedDateTimezonedNow=ZonedDateTime.now();// 带时区// 2. 创建指定时间LocalDateTimedt=LocalDateTime.of(2026,2,9,17,30,45);LocalDatedate=LocalDate.of(2026,Month.FEBRUARY,9);// 3. 格式化输出DateTimeFormatterformatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");System.out.println(now.format(formatter));// 2026-02-09 17:30:45// 4. 解析字符串LocalDateTimeparsed=LocalDateTime.parse("2026-02-09 17:30:45",formatter);// 5. 加减操作(不可变,返回新对象)LocalDateTimetomorrow=now.plusDays(1);LocalDateTimeoneHourAgo=now.minusHours(1);// 6. 转为时间戳(用于数据库或网络传输)Instantinstant=now.atZone(ZoneId.systemDefault()).toInstant();longepochMilli=instant.toEpochMilli();// 毫秒时间戳// 7. 从时间戳创建LocalDateTimefromTs=LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli),ZoneId.systemDefault());}}

✅ 优点:不可变、线程安全、API 清晰、无夏令时陷阱(合理处理)


⚠️ 旧版 API(Java 8 之前)——不推荐新项目使用

这些类存在设计缺陷(非线程安全、月份从 0 开始、可变等),但你可能在老代码中见到。

问题替代方案
java.util.Date表示时间戳,但命名误导(实际包含时间),可变,非线程安全InstantLocalDateTime
java.util.Calendar复杂、月份从 0 开始(Jan=0)、可变、非线程安全LocalDateTime/ZonedDateTime
java.text.SimpleDateFormat非线程安全!格式化性能差DateTimeFormatter

❌ 旧 API 示例(仅作对比)

// 危险!SimpleDateFormat 非线程安全SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");Datedate=sdf.parse("2026-02-09 17:30:45");// 注意:月份不用减1?其实这里字符串解析没问题,但构造 Date 时 Calendar.MONTH 从0开始!// Calendar 月份从0开始(反人类)Calendarcal=Calendar.getInstance();cal.set(2026,Calendar.FEBRUARY,9);// 正确(因为 Calendar.FEBRUARY = 1)// cal.set(2026, 1, 9); // 也是2月,但容易混淆

🔁 新旧 API 互转(兼容老系统)

// Date → Instant → LocalDateTimeDateoldDate=newDate();Instantinstant=oldDate.toInstant();LocalDateTimeldt=LocalDateTime.ofInstant(instant,ZoneId.systemDefault());// LocalDateTime → DateLocalDateTimeldt=LocalDateTime.now();DatenewDate=Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());

📌 最佳实践建议

  1. 新项目一律使用java.time(JSR-310)
  2. 永远不要在多线程环境中共享SimpleDateFormat
  3. 存储时间戳到数据库时,优先用Instant(UTC)或long毫秒值
  4. 显示给用户时,再根据其时区格式化(如ZonedDateTime
  5. 避免使用System.currentTimeMillis()做业务逻辑,改用Instant.now()

🧩 补充:第三方库(通常不需要)

  • Joda-Timejava.time的前身,Java 8 后官方已吸收其优点,无需再引入
  • ThreeTenBP:Android 或 Java 6/7 项目可使用(Backport of JSR-310)

总结

场景推荐类
本地日期时间(无时区)LocalDateTime
仅日期LocalDate
带时区的时间ZonedDateTime
时间戳(系统/数据库)Instant
格式化/解析DateTimeFormatter
时间间隔Duration(时分秒)、Period(年月日)

💡记住:Java 8 的java.time是处理时间的终极答案,简洁、安全、强大。

http://www.jsqmd.com/news/362565/

相关文章:

  • 2026四川正规厂房拆除回收公司推荐榜 - 深度智识库
  • 让AI学会“选择性遗忘”:数据脱敏如何守护你的隐私与安全
  • java对象排序
  • Linux文件IO与目录IO编程深度解析:从系统调用到实战应用
  • 2026新能源/120KW/快充/商用/电动车充电桩品牌推荐 本土优质企业解决方案甄选 - 深度智识库
  • 数据结构:双向链表-从原理到实战完整指南 - 详解
  • 3D 重建的终局是开放世界自由 | IDEA 张磊、光影焕像谭平团队发布 3D 场景生成框架 SceneMaker
  • 2026年电线电缆二手回收公司权威推荐:四川变压器回收/四川厂房拆除回收/四川中央空调回收/四川KTV设备回收市场选择指南 - 深度智识库
  • 【GIS实操指南】测量长度与面积的实用技巧
  • Java 多线程开发
  • 永磁同步电机谐波电流调控关键技术研究
  • [UG\NX二次开发] 分享“一键清除高亮工具”的源代码
  • 西南地区变压器回收服务商Top5推荐与选择技巧 - 深度智识库
  • 从心出发,向善而行——北京东慧公益基金会成立大会在京圆满举办
  • 港口岸电装上“智慧之眼”:绝缘监测与故障定位系统,让绿色能源更安全!
  • 百度竞价开户推广代运营推广科普:深圳昊客网络用数字化帮助企业实现增长引擎 - 专业GEO营销推广
  • 运维领域的多智能体可观测平台选型全景对比
  • 官宣升级!Claude Opus 4.6 正式发布,能力全面拉满,一步 API 即刻畅用
  • 当AI陷入信任危机,中国工厂已达成共识
  • 超多JavaScript实用小妙招
  • 为什么很多企业上了 ITSM,却始终停在“初级阶段”
  • 2026年四川电线电缆回收厂家权威推荐:卓航百顺实力与口碑兼具的可靠合作伙伴 - 深度智识库
  • 5个GEO产品优化误区,90%企业都踩过!3家专业服务商推荐
  • 企业加密软件都有哪些?六款值得关注的企业加密软件推荐
  • AI原生应用上下文理解:推动智能应用的创新发展
  • 2026新能源充电桩品牌推荐 本土优质企业全场景补能解决方案甄选 - 深度智识库
  • 大数据面试必问:Doris 核心原理与高频考点解析
  • 2026年百度竞价开户代运营推广公司/服务商排行榜:深圳昊客网络凭什么成为中小企业首选? - 专业GEO营销推广
  • 特定血型血液生成的研究进展:化学合成与微生物生产技术路线
  • 借助大数据分析实现电商市场洞察