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

如何在Java中指定夏令时转换后的时间

锺星腾
2023-03-14

使用以下代码:

class Test {
    public static void main(String [] args) {
        LocalDate date = LocalDate.of(2018, 11, 4);
        LocalTime time = LocalTime.of(1, 59);
        ZonedDateTime dt = ZonedDateTime.of(date, time, ZoneId.of("America/New_York"));
        System.out.println(dt.getHour() + ":" + dt.getMinute() + ":" + dt.getSecond());
        dt = dt.plusMinutes(1);
        System.out.println(dt.getHour() + ":" + dt.getMinute() + ":" + dt.getSecond());
        dt = dt.plusMinutes(59);
        System.out.println(dt.getHour() + ":" + dt.getMinute() + ":" + dt.getSecond());
        dt = dt.plusMinutes(1);
        System.out.println(dt.getHour() + ":" + dt.getMinute() + ":" + dt.getSecond());
    }
}

我得到

1:59:0
1:0:0
1:59:0
2:0:0

有没有办法从夏时制之后到1:00:00而不经过夏时制之前的1:00:00?

共有2个答案

戎鹏云
2023-03-14

尊重夏令时的时区的问题是这样的时间是模糊的。“美国/New_York”区有两个时间都标有2008-11-04T01:00:00。从技术上讲,其中一个是美国东部时间01:00,另一个是美国东部时间01:00,但是没有多少软件会让你这样区分,尤其是因为这样的三个字母的时区名称不一定是全球唯一的。

解决方案是以世界时或相对于世界时指定时间,世界时没有夏令时:第一个东部时间01:00是05:00Z,第二个是06:00Z。因此,您可以将时间指定为其中一个时间,将区域指定为“UTC”(然后将结果转换为“America/New_York”),或者使用标准的指定与UTC的偏移量。

黄弘深
2023-03-14

使用ofStrict的ofStrict来指定所生成的分区日期时间的偏移量America/New_York在相关时间从-04:00更改为-05:00,因此需要ZoneOffset。小时(-5)

ZonedDateTime dt = ZonedDateTime.ofStrict(
    LocalDateTime.of(date, time), 
    ZoneOffset.ofHours(-5), 
    ZoneId.of("America/New_York")
);

如果你不能硬编码的偏移量,你可以得到偏移量后使用:

var dateTime = LocalDateTime.of(date, time)
var zone = ZoneId.of("America/New_York");
var offsetAfter = zone.getRules()
    .getTransition(dateTime)
    .getOffsetAfter();
ZonedDateTime dt = ZonedDateTime.ofStrict(
    dateTime, 
    offsetAfter, 
    zone
);
 类似资料:
  • 在我的一个项目中,我必须将UTC DateTime转换为用户特定的日期和时间。我正在使用xml获取时间偏移量和夏令时参数。 例如offset=“GMT+2”dst=“true” 谢谢,

  • 看来我星期一早上有个案子!!! 正如你们所能看到的,我的本地机器位于东部时区,日光节约已经生效。这可以从下面的“日期”命令中看到。 然后我使用php生成了一个unix时间戳。它应该给出您当前的时间并在1970年1月1日的UTC 0:0:0将其转换为Unix纪元。 我的mysql会话被设置为UTC,我想象1460992469表示为mktime转换为UTC。 问题是转换回est不承认夏令时。谁能帮我指

  • 问题内容: 我想知道用Java最简单的方法来获取将来的夏令时将改变的日期列表。 一种相当灵活的方法是简单地迭代一整年的时间,然后对它们进行TimeZone.inDaylightTime()测试。这将起作用,并且我不担心效率,因为这仅在我的应用每次启动时都需要运行,但是我想知道是否有更简单的方法。 如果您想知道为什么要这样做,那是因为我有一个javascript应用程序,该应用程序需要处理包含UTC

  • 问题内容: 我需要知道是否由以下时间段定义: 内部有一个DST。 我正在遍历{start,end}定义的时间段集合,并在每次迭代中将开始和结束时间提前24小时。结果周期从午夜开始,到下一个午夜之前的1 ms结束。我发现如果该期间在班次内有夏令时,则会产生错误的结果,例如: 具有: 然后完成转移: 产生: 我想知道JodaTime中是否有任何标准API可以检查一段时间内是否有DST? 问题答案: 使

  • 轻触方格启用设定,即可将夏令时反映于时间显示中。

  • 夏令时间 选择[标准]或[夏令时间]。