java - 夏令时前后将 Duration.ofDays(1) 和 Period.ofDays(1) 添加到 ZonedDateTime 之间的区别
问题描述
美国/东部时区的夏令时于 11 月 1 日凌晨 2 点结束。结果,凌晨 2 点变成了凌晨 1 点。
我无法理解下面给出的代码中的以下内容:
- 为什么第 2 行显示时间 09:00,为什么不显示 10:00(增加 1 天)?
为什么第 4 行显示时间 10:00,为什么不显示 09:00(加上 24 小时)?
LocalDateTime ld = LocalDateTime.of(2015, Month.OCTOBER, 31, 10, 0); ZonedDateTime date = ZonedDateTime.of(ld, ZoneId.of("US/Eastern")); System.out.println(date); //line 1 - 2015-10-31T10:00-04:00[US/Eastern] date = date.plus(Duration.ofDays(1)); System.out.println(date); //line 2 - 2015-11-01T09:00-05:00[US/Eastern] date = ZonedDateTime.of(ld, ZoneId.of("US/Eastern")); System.out.println(date); //line 3 - 2015-10-31T10:00-04:00[US/Eastern] date = date.plus(Period.ofDays(1)); System.out.println(date); //line 4 - 2015-11-01T10:00-05:00[US/Eastern]
有人可以帮我吗?
解决方案
持续时间:尽管该ofDays
方法Duration
没有天数的概念。Duration.ofDays(1)
立即转换为 24 小时,所以这就是您要添加的内容。由于您在 DST 结束前一天将 24 小时添加到 10:00,因此您可以在第二天得到 09:00,如您所见,
时期:与已知日、周、月和年Duration
相反。Period
因此,您要添加 1 个日历日,在第二天(10:00)达到相同的挂钟时间,即使这意味着 25 小时后(不是 24 小时)。
推荐阅读
- amazon-web-services - org.neo4j.driver.v1.exceptions.ClientException:没有为此数据库实例注册名为“apoc.create.setProperties”的过程
- dns - 无法将流量从 DDNS 服务器转发到我的本地计算机端口
- python-3.x - 编辑:Pyspark:基于另一个数据框删除行,条件多列
- javascript - 在反应中使用发布订阅使组件卸载和安装
- angular - 如何在 ag-grid 中为数字右对齐文本
- php - 无法访问文件:2020-09-25 08:56:12 CLIENT -> SERVER: EHLO
- django - 通过 Django 发送电子邮件时出现无效的电子邮件地址错误
- java - 如何使用数字键盘输入键执行方程?
- apache-kafka - 从远程机器向 Kafka 集群发布消息
- python - 如何使用 XPATH 获取 XML 标记的文本