【问题标题】:Java equivalent for Python's toordinal()?Java 等效于 Python 的 toordinal()?
【发布时间】:2023-03-26 21:16:01
【问题描述】:

在 java 中复制 datetime.datetime.now().toordinal() 的最佳方法是什么? 我尝试使用 epoch,但结果还差得很远。

【问题讨论】:

  • 你能发布你的尝试和结果吗?
  • 这里是toordinal()的来源;如果您真的需要这种行为,您可能只想将其移植到 Java。

标签: java python datetime epoch ordinal


【解决方案1】:

没有任何直接的方法可以使用 Java Time API 查询该信息,但您可以计算它。

public static void main(String[] args) {
    long ordinal = LocalDate.now().toEpochDay() + (146097 * 5L) - (31L * 365L + 7L);

    System.out.println(ordinal);
}

今天,2016 年 4 月 19 日运行,它输出 736073,这与 Python 的输出一致。

通过LocalDate,您可以通过toEpochDay() 获取纪元日。如果你看一下inside the current implementation,你会发现它实际上是计算自第 0 年以来的总天数,并用常数减去它

static final long DAYS_0000_TO_1970 = (DAYS_PER_CYCLE * 5L) - (30L * 365L + 7L);

其中DAYS_PER_CYCLE = 146097 是 400 年周期中的天数。这个常量不是公开的,所以我们不能直接重用它。

从toordinal() 的 Python 文档中,它将第 1 年定义为序数为 1。Java API 上面的演算假设它是第 0 年,所以我们只需要对此进行调整。

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 1970-01-01
    • 2019-01-31
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2010-10-30
    相关资源
    最近更新 更多