4
在java中复制datetime.datetime.now().toordinal()
的最佳方法是什么? 我尝试使用时代,但结果远不及。Python的toordinal()相当于Java?
在java中复制datetime.datetime.now().toordinal()
的最佳方法是什么? 我尝试使用时代,但结果远不及。Python的toordinal()相当于Java?
没有任何直接的方法可以使用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年,所以我们只需要对此进行调整。
你能发表你试过的和结果吗? –
这是['toordinal()']的源代码(https://hg.python.org/cpython/file/3a9b47b062b9/Lib/datetime.py#l57);如果您确实需要这种行为,您可能只想将其移植到Java。 – dimo414