什么是在Java中复制“datetime.datetime.now().toordinal()”的最佳方法?
我尝试使用时期,但结果差得远。
public static void main(String[] args) {
long ordinal = LocalDate.now().toEpochDay() + (146097 * 5L) - (31L * 365L + 7L);
System.out.println(ordinal);
}
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年,因此我们只需要进行调整即可。
toordinal()
的源代码;如果你确实需要这种行为,你可能只需要将其移植到Java。 - dimo414