Java 等价于 Python 的 toordinal()?

Java equivalent for Python's toordinal()?

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

没有任何直接方法可以使用 Java 时间 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, you can get the Epoch day with toEpochDay(). If you take a look inside the current implementation,你会发现它实际上计算了从0年开始的总天数,并用常数

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

其中 DAYS_PER_CYCLE = 146097 是 400 年周期中的天数。该常量不是 public,因此我们不能直接重用它。

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