gpt4 book ai didi

Java ZonedDateTime 到即时转换

转载 作者:搜寻专家 更新时间:2023-11-01 02:57:45 25 4
gpt4 key购买 nike

我计划按照以下逻辑将 ZonedDateTime 转换为即时。

比如说,我在 PST 时区,当前时间是上午 11 点。如果我现在转换(截至今天 2018 年 3 月 4 日没有夏令时)并且 toInstant 将为晚上 7 点。

对于相同的上午 11 点,toInstant 将在 2018 年 4 月 4 日下午 6 点返回,因为将遵守夏令时。

所以,下面的代码正确返回。

ZonedDateTime dateTime = ZonedDateTime.now();  --->>> March 04th 2018 at 11 A.M PST
dateTime.plusMonths(1).toInstant(); -->> returns April 04th 2018 at 6 PM PST as daylight saving will be observed

但是,

如果我转换为 Instant 然后添加一个月,结果会有所不同。

Instant dateTime = ZonedDateTime.now().toInstant();  --->>> March 04th 2018 at 7 P.M UTC
dateTime.plus(1,ChronoUnit.MONTHS).toInstant(); -->> returns April 04th 2018 at 7 PM UTC ( but the actual time should be 6 PM UTC ).

没关系,因为我们已经转换为 UTC,它只是从那里添加。

因此,为了包括夏令时,我需要将天数、月数或年数添加到 ZonedDateTime,然后转换为 Instant。

ZonedDateTime dateTime = ZonedDateTime.now();   ---> March 04th 2018 at 11A.M
dateTime.plusDays(10).toInstant(); ---> March 14th 2018 at 6P.M
dateTime.plusMonths(1).toInstant(); ---> April 04th 2018 at 6P.M

以上代码按预期工作。但是下面的不是下午 6 点返回,而是晚上 7 点返回。

dateTime.plusSeconds(org.joda.time.Period.days(1).multipliedBy(10).toStandardSeconds().getSeconds())
.toInstant()) --> ---> March 14th 2018 at 7P.M

不确定,这有什么问题以及如何让它与秒一起工作。

最佳答案

原因可在 ZonedDateTime 类的文档中找到。对于 plusDays 方法,我们在方法文档中看到了这一点:

This operates on the local time-line, adding days to the local date-time. This is then converted back to a ZonedDateTime, using the zone ID to obtain the offset.

When converting back to ZonedDateTime, if the local date-time is in an overlap, then the offset will be retained if possible, otherwise the earlier offset will be used. If in a gap, the local date-time will be adjusted forward by the length of the gap.

但是,在 plusSeconds 方法的文档中,我们看到了这一点:

This operates on the instant time-line, such that adding one second will always be a duration of one second later. This may cause the local date-time to change by an amount other than one second. Note that this is a different approach to that used by days, months and years.

因此这两种方法的行为设计不同,您在选择适合您的目的的方法时需要考虑这一点。

关于Java ZonedDateTime 到即时转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49099735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com