1. 首页
  2. java8教程

016-十六、Java 8 新日期时间 API ( 中 ) – 时区日期时间

引言

上一章节 Java 8 新日期时间 API ( 上 ) – 本地日期时间 我们对 Java 8 重新设计的日期时间 API 做了一些基础的介绍,同时详细介绍了和本地时间有关的几个类 LocalDateTime 、LocalDate 和 LocalTime

我同时也发现,这三个类没有任何时区相关的信息,但也不能说它们没处理时区,而只能说它们有选择的隐藏了时区的处理。它们内部会使用操作系统当前的时区。

以此同时,Javajava.time 包中也提供了几个类用于处理需要关注时区的日期时间 API。它们是 java.time.ZonedDateTimejava.time.ZoneId。前者用于处理需要时区的日期时间,后者用于处理时区。

ZonedDateTimeLocalDateTime 类似,几乎有着相同的 API。从某些方面说,ZonedLocalTime 如果不传递时区信息,那么它会默认使用操作系统的时区,这样,结果其实和 LocalDateTime 是类似的。

比如,我们可以使用 ZonedDateTimenow() 方法返回当前时区 ( 操作系统时区 ) 的日期时间,调用 parse() 方法可以将一个包含了时区信息的字符串格式的日期时间转化为一个 ZonedDateTime 实例。

Java8Tester.java


import java.time.ZonedDateTime; public class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); tester.run(); } public void run() { ZonedDateTime now = ZonedDateTime.now(); System.out.println("当前日期时间是:" + now); ZonedDateTime datetime = ZonedDateTime.parse("2012-10-10T21:58:00+08:00"); System.out.println("日期时间是:" + datetime); } } 运行结果如下 [penglei@www.ycbbs.vip helloworld]$ javac Java8Tester.java && java Java8Tester 当前日期时间是:2018-10-08T22:21:56.806597+08:00[Asia/Shanghai] 日期时间是:2012-10-10T21:58+08:00

我们还可以调用 ZonedDateTime 对象的 toLocalDate()toLocalTime() 方法将获取该实例的转换为本地的日期和时间


import java.time.LocalTime; import java.time.LocalDate; import java.time.ZonedDateTime; public class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); tester.run(); } public void run() { ZonedDateTime now = ZonedDateTime.now(); System.out.println("当前日期时间是:" + now); LocalDate date = now.toLocalDate(); System.out.println("本地日期是:" + now); LocalTime time = now.toLocalTime(); System.out.println("本地时间是:" + time); } } 运行结果如下 [penglei@www.ycbbs.vip helloworld]$ javac Java8Tester.java && java Java8Tester 当前日期时间是:2018-10-08T22:28:10.389487+08:00[Asia/Shanghai] 本地日期是:2018-10-08T22:28:10.389487+08:00[Asia/Shanghai] 本地时间是:22:28:10.389487

P.S 这个返回值好诡异,为啥 toLocalDate() 还返回了时间?

处理时区

时区相关的信息,我们可以使用 ZoneId 类来处理。

比如可以调用 ZoneId 类的静态方法 systemDefault() 返回当前的时区。


import java.time.ZonedDateTime; import java.time.ZoneId; public class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); tester.run(); } public void run() { ZoneId currentZone = ZoneId.systemDefault(); System.out.println("当前时区是: " + currentZone); } } //运行结果如下 [penglei@www.ycbbs.vip helloworld]$ javac Java8Tester.java && java Java8Tester 当前时区是: Asia/Shanghai

我们还可以调用 ZonedDateTime 实例的 getZone() 方法获取实例所在的时区


import java.time.ZonedDateTime; import java.time.ZoneId; public class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); tester.run(); } public void run() { ZonedDateTime now = ZonedDateTime.now(); System.out.println("当前时区是: " + now.getZone()); } } //运行结果如下 [penglei@ycbbs.vip helloworld]$ javac Java8Tester.java && java Java8Tester 当前时区是: Asia/Shanghai

写完了如果写得有什么问题,希望读者能够给小编留言,也可以点击[此处扫下面二维码关注微信公众号](https://www.ycbbs.vip/?p=28 "此处扫下面二维码关注微信公众号")

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「方志朋」,公众号后台回复「666」 免费领取我精心整理的进阶资源教程
  4. JS中文网,Javascriptc中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,是给开发者用的 Hacker News,技术文章由为你筛选出最优质的干货,其中包括:Android、iOS、前端、后端等方面的内容。目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。

    本文著作权归作者所有,如若转载,请注明出处

    转载请注明:文章转载自「 Java极客技术学习 」https://www.javajike.com

    标题:016-十六、Java 8 新日期时间 API ( 中 ) – 时区日期时间

    链接:https://www.javajike.com/article/1409.html

« 017-十七、Java 8 新日期时间 API ( 下 ) – 格式化
015-十五、Java 8 新日期时间 API ( 上 ) – 本地日期时间»

相关推荐

QR code