6

などの JSR-310 クラスから修正ユリウス日を計算するにはどうすればよいLocalDateですか? (JDK 8)

具体的には、これはユリウス暦システムの日付ではなく、「修正ユリウス日」として知られる連続した日数の計算です。

例えば:

LocalDate date = LocalDate.now();
long modifiedJulianDay = ???
4

1 に答える 1

8

簡潔な答え:

LocalDate date = LocalDate.now();
long modifiedJulianDay = date.getLong(JulianFields.MODIFIED_JULIAN_DAY);

説明:

ウィキペディアの記事は、ユリウス日を概念として最もよく説明しています。簡単に言えば、あるエポックからのシンプルで連続的な日数であり、選択されたエポックがバリエーションにその名前を与えます。したがって、修正ユリウス日は 1858 年 11 月 17 日からカウントされます。

JSR-310 の日付と時刻のオブジェクトは、メソッドとTemporalAccessorを定義するインターフェースを実装します。これらを使用すると、特定の時間フィールドについて日付/時刻オブジェクトを照会できます。ユリウス日のバリエーションを提供する 4 つのフィールド実装が提供されます。get(TemporalField)getLong(TemporalField)

getLong(TemporalField)これらのフィールドは、 では大きすぎる数値を返すため、でのみ使用できますint。呼び出すとnow.get(JulianFields.MODIFIED_JULIAN_DAY)、例外がスローされます: 「UnsupportedTemporalTypeException: Invalid field ModifiedJulianDay for get() method, use getLong() instead.」

JSR-310 は からの整数のみを提供できることに注意してくださいTemporalField。したがって、時刻を表すことはできず、数値はすべて真夜中に基づいています。計算では、UTC ではなく現地の午前 0 時も使用されるため、考慮に入れる必要があります。

フィールドは、メソッド on を使用して日付/時刻オブジェクトを更新するためにも使用できますTemporal

result = input.with(JulianFields.MODIFIED_JULIAN_DAY, 56685);
于 2014-01-28T11:18:28.783 に答える