【问题标题】:Java: How to get the timestamp of '1000-01-01 00:00:00' in UTC?Java:如何在 UTC 中获取“1000-01-01 00:00:00”的时间戳?
【发布时间】:2020-01-19 09:06:41
【问题描述】:

我在两个不同的结果中得到了“1000-01-01 00:00:00”的时间戳。有人知道为什么吗?

TimeZone timeZone = TimeZone.getTimeZone(ZoneOffset.UTC);
GregorianCalendar calendar = new GregorianCalendar(timeZone);
calendar.clear();
calendar.set(1000, 0, 1, 0, 0, 0);
System.out.println(calendar.getTimeInMillis()); // print -30609792000000
System.out.println(ZonedDateTime.of(1000, 1, 1,0, 0, 0, 0, timeZone.toZoneId()).toInstant().toEpochMilli()); // print -30610224000000

【问题讨论】:

  • 您要求提供 2 个不同的日期。看第二个字段
  • @hardillb 不是这样。一月份是 0 与 GregorianCalendar 和 1 与 ZonedDateTIme,所以它是相同的日期。
  • @OleV.V.好吧,创建 API 的人做出了一个愚蠢的决定
  • @hardillb 是的,0-11 个月是一个愚蠢的设计决定。这就是为什么GregorianCalendar 类在几年前被现代ZonedDateTime 日历所取代的众多原因之一。您应该不再使用GregorianCalendar

标签: java datetime calendar


【解决方案1】:

GregorianCalendar 尽管它的名字使用儒略历,但在公历从 1582 年及以后引入之前的时间。相比之下,ZonedDateTime 使用Proleptic Gregorian calendar,也就是说,将公历外推到当时没有使用它的世纪。

所以您实际上是在使用两个日历系统。这就解释了为什么您会得到两个不同的结果。

【讨论】:

    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    相关资源
    最近更新 更多