「Unixエポックの開始からの経過ミリ秒」から「紀元前4713年1月1日からの経過日数」に変換するJavaメソッドが必要です。この機能はすでにJavaで実装されていますか?
私はいくつかのオプションを試しました。それらのいくつかはコンパイルされません。それらのいくつかは、オンラインで利用可能な変換と矛盾しています(http://www.onlineconversion.com/julian_date.htm)。ですので、十分に活用した回答のみを投稿してください。
「Unixエポックの開始からの経過ミリ秒」から「紀元前4713年1月1日からの経過日数」に変換するJavaメソッドが必要です。この機能はすでにJavaで実装されていますか?
私はいくつかのオプションを試しました。それらのいくつかはコンパイルされません。それらのいくつかは、オンラインで利用可能な変換と矛盾しています(http://www.onlineconversion.com/julian_date.htm)。ですので、十分に活用した回答のみを投稿してください。
JoddからJDateTimeを試してください。これは、 Julian Date Numbersに対してすべての計算を実行する日時クラスです。JdateTimeクラスは使いやすいユーザー インターフェイスを備えており、いつでもユリウス日の値を取得できます。たとえば、クラスを epox ミリ秒でインスタンス化してから、ユリウス日番号を読み取ることができます。
JDateTime jdt = new JDateTime(milliseconds);
JulianDateStamp jds = jdt.getJulianDate();
// or:
double jdn = jdt.getJulianDateDouble()
// or:
int jdn = jdt.getJulianDateNumber()
具体的な計算に興味がある場合は、メソッドTimeUtil#toJulianDateを参照してください。実績のある天文学的アルゴリズムに基づいていますが、浮動小数点の計算エラーにも注意を払っています。これが、結果がJulianDateStampである理由です。これは、JD 整数とその小数部を別々に保持し、最大 1 ミリ秒の精度を提供するクラスです。このクラスには、多くのテスト ケースも書かれています。
ここに投稿された方法は、本質的に私のニーズを解決しました: http://www.rgagnon.com/javadetails/java-0506.html#comment-811614512 正午 (12:00 UTC) の時刻を返すことを考慮する必要があります。 、これは日付の午前 0 時 (0:00 UTC) より 1 日後です。
ミリ秒から (年、月、日) に変換するには (前述のメソッドが想定する形式)、次の命令を使用できます。
Date date = new Date(longMillis);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1; // El mes que devuelve Calendar va de 0 a 11.
int day = calendar.get(Calendar.DAY_OF_MONTH);
int[] ymd = new int[] {year, month, day};
GregorianCalendar cal = new GregorianCalendar();
cal.setTimeInMillis(millis);
cal.setGregorianChange(new Date(Long.MAX_VALUE));
int julianDay = cal.get(Calendar.DAY_OF_YEAR);