【问题标题】:How to change the default epoch of 1970-01-01T00:00:00Z for LocalDateTime如何更改 LocalDateTime 的默认纪元 1970-01-01T00:00:00Z
【发布时间】:2017-02-19 07:11:14
【问题描述】:

LocalDateTime类中,有一个将纪元秒和纳秒转换为UTC时间的方法。

看起来像:

LocalDateTime dateTime = LocalDateTime.ofEpochSecond()

但是,它使用 1970-01-01T00:00:00Z 纪元的秒数​​获取LocalDateTime 的实例。

有没有办法将 1970 修改为 1980 作为默认实例?

我认为我需要更改它,因为:

epoch seconds = 667662644 
epoch nanoseconds = 1165598

应该出来:

13:50:44.001165598 03/03/2001

但我得到了:

13:50:44.001165598 2/27/1991

【问题讨论】:

  • 简短回答:不! --- 长答案:如果您的时代与 Java 时代不同,那么由您决定应用差异,例如1/1/1970 和 1/1/1980 之间的秒数,即 315532800。
  • @Andreas 好的,这是有道理的。我将找出偏移量,然后使用 LocalTimeClass。欣赏小费。
  • 请注意,纪元为 1/1/1980 的 667662644 是 2/26/2001,而不是 3/3/2001。似乎给出的值甚至不适用于带有闰年的公历。
  • @Andreas 开始使用的日期似乎是 01/06/1980,这样更有意义吗?
  • 哇,这是一个奇怪的时代价值! LocalDateTime.of(1980, 1, 6, 0, 0).toEpochSecond(ZoneOffset.UTC) 显示偏移量为 315964800。将其添加到您的“纪元秒数”中,您将得到您想要的。

标签: java time epoch


【解决方案1】:

找出您需要的偏移量,并将其添加到所有纪元秒值中,然后再转换为“LocalDateTime”。

偏移量可以计算一次,然后硬编码为

public static final int EPOCH_OFFSET = nnnn;

示例:

    Instant GPS = Instant.parse("1980-01-06T00:00:00Z");
    long    GPS_EPOCH = GPS.toEpochMilli();
    System.out.printf("%s %,d\n",GPS.toString(), GPS_EPOCH);

输出:

1980-01-06T00:00:00Z 315,964,800,000

【讨论】:

  • 好的。感谢您的回答。为了清楚起见,我需要找到从 1970-01-01 到 1980-06-01 的纪元秒数,这将是 EPOCH_OFFSET,然后从总纪元秒数中减去?
  • @JaredSmith 1980 年 6 月 1 日?真的吗?
  • 您可以通过创建您想要的纪元的LocalDateTime 并转换为Java纪元秒来获取偏移量。然后将该值添加到基于您的纪元的时间值中,以将它们转换为 Java 纪元。我在原始答案中输入错误的操作,我正在修复它。
  • @Andreas 抱歉我打错了,应该是 1980 年 1 月 6 日
  • 如果使用LocalDateTime,请务必小心。纪元很可能基于 UTC,因此请确保您的偏移量正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 2012-09-26
  • 1970-01-01
  • 2012-03-14
  • 2018-08-26
相关资源
最近更新 更多