Java 等价于 Python 的 toordinal()?

Oce*_*lot 4 python java datetime epoch ordinal

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

Tun*_*aki 5

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

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

    System.out.println(ordinal);
}
Run Code Online (Sandbox Code Playgroud)

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

从 a 开始LocalDate,您可以获得 Epoch 日toEpochDay()。如果您查看当前的实现,您会发现它实际上计算了自第 0 年以来的总天数,并用常数减去它

static final long DAYS_0000_TO_1970 = (DAYS_PER_CYCLE * 5L) - (30L * 365L + 7L);
Run Code Online (Sandbox Code Playgroud)

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

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