gpt4 book ai didi

java - 为什么java中的即时日期显示时间4 :56:02Z for a given date which is before 1884

转载 作者:行者123 更新时间:2023-12-02 09:42:42 25 4
gpt4 key购买 nike

对于我的工作,我想根据给定的 ZoneID 获取给定日期的即时日期,一切都工作正常,但是当我检查旧日期(1883 年或更早)时。时间显示为 04:56,而不是 5:00。

对于 1883 年 11 月 18 日之后的任何日期,它都会给出正确的结果,例如 1883-11-19T05:00:00Z

有人可以帮忙吗,为什么旧​​日期的时间显示为 4:56?

public static String firstdate = "18831118";

LocalDate localFirstDate = LocalDate.parse(firstdate, DateTimeFormatter.ofPattern("yyyyMMdd"));
LocalDateTime localDateTime = localFirstDate.atStartOfDay();
Instant instantFirstDate = localDateTime.toInstant(ZoneId.of("America/New_York").getRules().getOffset(localDateTime));

输出

1883-11-18T04:56:02Z
public static String firstdate = "18831119";

LocalDate localFirstDate = LocalDate.parse(firstdate, DateTimeFormatter.ofPattern("yyyyMMdd"));
LocalDateTime localDateTime = localFirstDate.atStartOfDay();
Instant instantFirstDate = localDateTime.toInstant(ZoneId.of("America/New_York").getRules().getOffset(localDateTime));

输出

1883-11-19T05:00:00Z

在后一种情况下,它完美地显示了时间5:00:00Z

最佳答案

(假设 localDateTime 声明为 LocalDateTime localDateTime = localFirstDate.atStartOfDay(); )

如果您查看 ZoneId.of("America/New_York").getRules().getOffset(localDateTime) 返回的内容,您会看到它的偏移量约为 -4:56。时刻是使用此偏移量计算的,因此它们的时间为 04:56。

为什么纽约在 1883 年 11 月 17 日之前有如此奇怪的时区偏移?显然,11 月 18 日,Standard time zones forms by railroads in US & Canada 。很容易想象,在该日期之前没有标准的准时时区。

如果查看其他时区,例如Asia/Macau ,你会发现它们中的大多数在一百多年前都有奇怪的偏移。搞乱时区是我们人类很自然的事情:)。

在您的具体情况下,如果您想在 1883 年 11 月 18 日之前使用标准化时区偏移量,您只需应用 ZoneOffsetTransitionRule你从ZoneId.of("America/New_York").getRules().getTransitionRules()获得手动,但我不确定这有多大意义。

关于java - 为什么java中的即时日期显示时间4 :56:02Z for a given date which is before 1884,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56933173/

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