java基础设计日期类

java基础设计日期类最初学习 Java 时是采用学校教材和市面上的一些 Java 视频教程进行学习 到了工作中才发现有些 API 或包已经过时了 最近使用 Java 中的日期处理时发现 java util date 与 Calender 相关包官方已经逐渐弃用 因此总结一下目前 Java 中的日期处理方式 首先先了解一下为什么 Java 8 之前的日期处理方式为什么难用 对大多数初学者最熟悉的

大家好,我是讯享网,很高兴认识大家。



最初学习 Java 时是采用学校教材和市面上的一些 Java 视频教程进行学习,到了工作中才发现有些 API 或包已经过时了。最近使用 Java 中的日期处理时发现 java.util.date 与 Calender 相关包官方已经逐渐弃用,因此总结一下目前 Java 中的日期处理方式。

它的打印效果如下:

但它并不直观,他默认返回计算机格式的日期。你需要将它转换为我们容易获取的特定格式,需要使用 java.text.SimpleDateFormat 类进行格式转化,但这个类不是线程安全的,多线程格式转化需要使用同步代码块加锁解决线程安全问题。

随后 Java 1.1 出现了 java.util.Calender 类,但 Calender 类也有涉及缺陷,比如月份也是从 0 开始。许多新手在选择日期处理方式时会不知道用哪种,新手在使用 Date 与 Calender 的过程中会出现各种难以预料的错误,调试搜索后才会发现原来是设计上的缺陷。

直到 Java 8 才出现了目前正在使用的新的日期和时间库 java.time.xxx。

Java  中的最新的日期处理方式

目前网上搜索的 Java 日期处理最多的返回结果还是 Date 、Calender 类型的问题,我也是因为踩过日期处理的许多坑才发现自己的知识已经过时,我相信跟我一样的工程师不在少数。

为什么我定义 Java 8 中的日期处理方式是最新的呢,因为 Java 11 等后续版本一直在沿用 Java 8 的日期处理方式。Java 8 中出现了新的日期创建与时间间隔的类。分别是 LocalDate 、LocalTime 、Instant 、Duration 和 Period 。

我将参考 Java 11 的 java.time 文档讲解这些日期处理方式。

使用 LocalDate 、 LocalTime 与 LocalDateTime

LocalDate 存储没有时间的日期。它存储的日期类似于 “2010-12-03” ,可以用来存储生日。

LocalDate 可以创建 ISO-8601日历系统中没有时区的日期,如 2007-12-03。LocalDate 是一个不可变的日期-时间对象,表示日期,通常格式为年-月-日。如下代码创建一个LocalDate 对象并实验其方法。

一天中的时间,可以用 LocalTime 来表示,LocalTime 存储没有日期的时间。这种存储时间格式为 “11:30”,可以用来存储营业的时间。LocalTime 是一个不可变的日期-时间对象,它表示时间,通常被视为小时-分钟-秒。时间以纳秒精度表示。

LocalDateTime 是 ISO-8601日历系统中不带时区的日期-时间,如2007-12-03T10:15:30。LocalDateTime是一个不可变的日期-时间对象,它表示一个日期-时间,通常被视为年-月-日-时-分-秒。还可以访问其他日期和时间字段,如 day-of-year、day-of-week 和 week-of-year。

ZonedDateTime 的使用

ZonedDateTime  ISO-8601日历系统中带有时区的日期-时间,例如 . 我们可以从下图看出 LocalDate、LocalTime、LocalDateTime java基础设计日期类 、ZonedDateTime 的区别。

ZoomId 对应的Map选项可以从官方文档中查看 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/ZoneId.html

LocalDate 与 LocalTime 与字符串格式转化

我们可以使用指定的 fomatter 程序格式化日期, java.time.format.DateTimeFormatter 提供了两个方法:一个用于格式化,format(DateTimeFormatter formatter),另一个用于解析,parse(CharSequence text, DateTimeFormatter formatter)。

Duration 与 Period

Duration 一个基于时间的时间量,例如'34.5秒'。

它的 between 方法可以计算两个 LocalDateTime 或 两个 LocalTime 或两个 Instance 之间的间隔。

注意 Instance (时间线上的瞬间点)这个类记录时间线上的单个瞬时点,常在应用程序中记录事件时间戳。

Period 是 ISO-8601日历系统中基于日期的时间量,例如“2年、3个月和4天”。

创建好 Period 和 Duration 对象后,我们可以使用他们定义好的各种方法查询两个日期之间的时间差,用于后续处理逻辑。

总结

Java 中的日期处理方式目前采用 LocalDate、LocalTime、LocalDateTime,应该逐渐抛弃以前的 Date 与 Calender 方式。

参考资料

  • 《Java 8实战》 。人民邮电出版社.。[英]厄马(Raoul-Gabriel Urma)[意] 弗斯科(Mario Fusco)[英] 米克罗夫特(Alan Mycroft).
  • Java 11 官方文档
小讯
上一篇 2024-12-24 13:07
下一篇 2024-12-25 09:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/10102.html