Python的toordinal()相当于Java?

时间:2016-04-19 14:18:55

标签: java python datetime epoch ordinal

在java中复制datetime.datetime.now().toordinal()的最佳方法是什么? 我尝试使用纪元,但结果远不及。

1 个答案:

答案 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年,所以我们只需要调整它。