弃用Date

伴随 lambda表达式、streams 以及一系列小优化,Java 8 推出了全新的日期时间API。

Java处理日期、日历和时间的不足之处:将 java.util.Date 设定为可变类型,以及 SimpleDateFormat 的非线程安全使其应用非常受限。然后就在 java8 上面增加新的特性。

全新API的众多好处之一就是,明确了日期时间概念,例如:瞬时(instant)、 长短(duration)、日期、时间、时区和周期。

同时继承了Joda 库按人类语言和计算机各自解析的时间处理方式。不同于老版本,新API基于ISO标准日历系统,java.time包下的所有类都是不可变类型而且线程安全。

不可变性

❌ 可变

✅ 不可变

线程安全

❌ 需同步

✅ 天生安全

API 设计

❌ 反直觉(如月份从0开始)

✅ 人性化(如

 

Month.JANUARY

时区处理

❌ 混淆时刻与本地时间

✅ 明确区分(

Instant

/

ZonedDateTime

格式化

 

SimpleDateFormat

 

非线程安全

 

DateTimeFormatter

 

线程安全

功能扩展

❌ 基本无操作支持

✅ 丰富的日期时间计算

因此,Java 8 引入 java.time 是为了解决历史遗留问题,提供更安全、清晰、强大的日期时间处理能力。对于新代码,应优先使用新 API。

Instant:瞬时实例。

LocalDate:本地日期,不包含具体时间 例如:2014-01-14 可以用来记录生日、纪念日、加盟日等。

LocalTime:本地时间,不包含日期。

LocalDateTime:组合了日期和时间,但不包含时差和时区信息。

ZonedDateTime:最完整的日期时间,包含时区和相对UTC或格林威治的时差。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务