スプレッドシート(MS Excel、Google Apps)は、1900年1月1日からの丸日数として日付を表します(Excelの場合は2月29日の奇妙なことに注意してください)。OK、うるう年を除いて365日です。しかし、それはすでにあまりにも多くの算術です。
おそらく、java.util.[Gregorian]Calendarこれらすべてを知っています。問題は、その知識にアクセスする方法がわからないことです。
投機的な世界では、次のようなことがあります。
myGcalEarlier.set(1900, Calendar.JANUARY, 1);
myGcalLater.set(new Date());
long days1 = myGcalEarlier.mysteryMethod();
long days2 = myGcalLater.mysteryMethod();
long days = days2 - days1;
悲しいことに、Calendar.get(Calendar.DAYS_IN_YEAR)'mysteryMethod'には満足しません-Calendar.DAYS_EVER私がやりたいことをするためのフィールドが必要になります。
暦日で表現された正確な差を取得するためのAPIはありますか?
ノート
86400秒の日ではなく、暦日が本当に必要です。タイムゾーンと夏時間の問題はさておき(@Dipmedeepに感謝)、うるう年を考慮する必要があります。これらの用語では、31536000秒は365日です。4年のうち3年、それは私を1月1日から1月1日まで取得します。しかし、4年目には、1月1日から12月31日までしか取得できず、4年ごとに1日のエラーが発生します。
暦日数を取得するためのソリューションはすでにあります。Javaに移行するのは簡単なコードであり、目的の答えが得られます(ただし、私はそれを理解していないため、信頼できません)。この質問は、これらの計算を回避してJDKの「信頼できる」ライブラリに延期できるかどうかを具体的に尋ねています(編集後はさらにそうです)。私はこれまで「いいえ」と結論付けました。