当前位置: 首页 > 知识库问答 >
问题:

Java8时间api如何选择DST变化周期的偏移量

岳锦
2023-03-14

在Java 8 time API中,您可以创建一个LocalDateTime,该时间位于秋季DST时间变化期间(中欧时间)的时间重叠处。

您可以将其转换为ZonedDateTime,该时间表示使用ZoneId的精确时刻。

这样做实际上并不能解决歧义-仍然可能有两个时刻对应于此LocalDateTime和此区域(但偏移量不同)。

时间API如何以及为什么(欢迎参考)选择夏季偏移?

@Test
public void TimeSetOnDST() throws Exception {
    LocalDateTime time = LocalDateTime.of(2016, 10, 30, 2, 30); // in the DST time overlap
    ZonedDateTime of = ZonedDateTime.of(time, ZoneId.of("Europe/Zurich"));
    System.out.println(of); // 2016-10-30T02:30+02:00[Europe/Zurich]
    // But why not 2016-10-30T02:30+01:00[Europe/Zurich] ?
    // Is this just "by convention"?
}

共有1个答案

时宾实
2023-03-14

javadoc中有很好的文档记录:

在大多数情况下,本地日期时间只有一个有效偏移量。在重叠的情况下,当时钟设置回原位时,有两个有效偏移。此方法使用通常对应于“summer”的早期偏移。

如@JodaStephen的注释中所述,如果您想选择其他可用偏移量,您可以使用with LaterOffsetAtOverap方法。

 类似资料:
  • 问题内容: 只是为了验证这一点:我有这种la脚和脑死法,可以计算当前位置的时区偏移量。我想知道是否在需要调整“夏令时”时需要进行调整(目前,我所在的位置为CET时区,所以是“冬季时间”,因此很难验证)。 感谢您的任何提示。 问题答案: 通常,Joda时间会自己照顾DST,因此您不必担心。但是,我注意到您正在传递给getOffset()。鉴于时区偏移量取决于日期,因此您确实应该传递计算偏移量的日期/

  • 我有下面的代码来计算偏移量,这里我在EST时区机器上执行下面的代码,其偏移量为-18000秒,即UTC-5.00 请注意,由于一些限制,我不能使用,这里要提到的限制很长。所以我用下面的逻辑从localtime epoch减去GMT epoch,如下所示,它完美地返回了偏移量。 现在,我想在这里假设DST(日光节约)的情况,偏移量为-14400秒,即UTC-4.00。由于EST时区DST(日光节约)

  • 我在两个地方为一个组织工作。其中之一是智利,那里的夏令时极难预测,往往每年都有变化。我们有一个依赖于时间的应用程序,直到现在,一直在使用joda time。当智利政府决定更改夏令时,我们使用joda代码将偏移量设置为默认的: 另外,在Java8Time中转换单元的最佳方法是什么?假设我有24小时,我想把它换算成几天。(我这样问是因为在这种情况下,似乎很多方法都是以毫秒为单位工作的,而我想要以小时为

  • 我需要一些解释为什么这个代码不编译: 错误: 类型Duration中的(TemporalAmount)方法不适用于参数(ChronoUnit) 正如本文所述: public static Duration from(TemporalAmount amount)从时间量中获取持续时间的实例。这将根据指定的金额获得持续时间。TemporalAmount表示一个时间量,可以是基于日期的,也可以是基于时间

  • 也许有人能给我举个例子?我在问自己,新的日期和时间API的改进来自哪里。

  • 问题内容: 我有一个类型为“ datetime”的列,其值类似于2009-10-20 10:00:00 我想从datetime提取日期并编写类似的查询: 以下是最好的方法吗? 但是,这将返回一个空的结果集。有什么建议么? 问题答案: 您可以使用MySQL的功能: 您也可以尝试以下方法: 有关使用的性能影响的信息,请参见此答案。