在java中复制datetime.datetime.now().toordinal()
的最佳方法是什么?
我尝试使用纪元,但结果远不及。
答案 0 :(得分:4)
使用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年,所以我们只需要调整它。