2016-04-19 6 views
4

datetime.datetime.now().toordinal()をjavaに複製する最良の方法は何ですか? 私はエポックを使ってみましたが、結果はどこにもありません。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日には、それはPythonの出力と一致している736073を出力します。

LocalDateから、toEpochDay()でエポックの日を取得できます。あなたが見inside the current implementationを取る場合、あなたはそれが実際に年0からの日数の合計数を計算し、一定の

DAYS_PER_CYCLE = 146097は、400年周期の日数です
static final long DAYS_0000_TO_1970 = (DAYS_PER_CYCLE * 5L) - (30L * 365L + 7L); 

であることを差し引くことがわかります。その定数は公開されていないため、直接再利用することはできません。

toordinal()のPythonドキュメントからは、1に序数が1と定義されています。上記のJava APIの計算では、代わりに年が0であると仮定しています。

関連する問題