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

标签 java

对于我的工作,我想根据给定的 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/

相关文章:

java - 如何为线程池服务器预分配对象?

java - 在 Apache POI 中按单元格名称设置新单元格值

java - 带有 boolean 数组的 SharedPreference 上的 ArrayIndexOutOfBoundsException?

Java LinkedBlockingQueue 源代码困惑

java - 即使数据可用,如何在 JComboBox 中设置空字符串?

java - 与用户一起编写 bdd cucumber 功能/场景的最佳实践

java - Pig latin 中扁平运算符的模式

java - Mysql blob 图片转换为 awt.image,然后 awt.image 转换为 blob,无需更改大小

java - GWT Date 相当于 java.util.Calendar

java - 如何读取窗口内容(使用accessibilityService)并在Android中使用draw over other app权限唤起UI?