Java中类似于Python的toordinal()方法的等效方法是什么?

4
什么是在Java中复制“datetime.datetime.now().toordinal()”的最佳方法? 我尝试使用时期,但结果差得远。

你能否发布一下你尝试过的内容和结果? - Nick DeFazio
这里是toordinal()的源代码;如果你确实需要这种行为,你可能只需要将其移植到Java。 - dimo414
1个回答

5
使用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()获取Epoch day。如果您查看当前实现内部, 您会发现它实际上计算自公元0年以来的总天数,并将其减去一个常量。
static final long DAYS_0000_TO_1970 = (DAYS_PER_CYCLE * 5L) - (30L * 365L + 7L);

DAYS_PER_CYCLE = 146097 是四百年周期内的天数。由于该常量不是公开的,因此我们无法直接重用它。

根据 Python toordinal() 的文档,它将第一年定义为序数1。Java API 中上述计算假定这是第0年,因此我们只需要进行调整即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接