2016-04-19 59 views
4

在java中複製datetime.datetime.now().toordinal()的最佳方法是什麼? 我嘗試使用時代,但結果遠不及。Python的toordinal()相當於Java?

+0

你能發表你試過的和結果嗎? –

+0

這是['toordinal()']的源代碼(https://hg.python.org/cpython/file/3a9b47b062b9/Lib/datetime.py#l57);如果您確實需要這種行爲,您可能只想將其移植到Java。 – dimo414

回答

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年,所以我們只需要對此進行調整。