Java 等价于 Python 的 toordinal()?
Java equivalent for Python's toordinal()?
在 java 中复制 datetime.datetime.now().toordinal()
的最佳方法是什么?
我尝试使用 epoch,但结果相去甚远。
没有任何直接方法可以使用 Java 时间 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
, you can get the Epoch day with toEpochDay()
. If you take a look inside the current implementation,你会发现它实际上计算了从0年开始的总天数,并用常数
减去它
static final long DAYS_0000_TO_1970 = (DAYS_PER_CYCLE * 5L) - (30L * 365L + 7L);
其中 DAYS_PER_CYCLE = 146097
是 400 年周期中的天数。该常量不是 public,因此我们不能直接重用它。
根据 toordinal()
的 Python 文档,它定义第 1 年的序数为 1。Java API 上面的演算假定它是而不是第 0 年,所以我们只需要为此进行调整。
在 java 中复制 datetime.datetime.now().toordinal()
的最佳方法是什么?
我尝试使用 epoch,但结果相去甚远。
没有任何直接方法可以使用 Java 时间 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
, you can get the Epoch day with toEpochDay()
. If you take a look inside the current implementation,你会发现它实际上计算了从0年开始的总天数,并用常数
static final long DAYS_0000_TO_1970 = (DAYS_PER_CYCLE * 5L) - (30L * 365L + 7L);
其中 DAYS_PER_CYCLE = 146097
是 400 年周期中的天数。该常量不是 public,因此我们不能直接重用它。
根据 toordinal()
的 Python 文档,它定义第 1 年的序数为 1。Java API 上面的演算假定它是而不是第 0 年,所以我们只需要为此进行调整。