ジュリアン・デイトは、それに関連する歴史と改革を考慮すると複雑な概念になります。これは、Javaで提供されているJulianの日付実装を使用する場合の問題です。これは、実装されているバリエーションがわからないため、Julian Dateの他の定義が必要な場合があります。
だから、this articleを見て、あなたが必要とするジュリアン・デーのバージョンを決めてください。 Julian Dateのバージョンを決定したら、それをGregorian Calendarにマップするのはかなり簡単です。
- ユリウス日は、午前12時に始まり、我々は最も独創ユリウス日を考えると
、11月24日、グレゴリオ暦の4714 BC。
- あなたが気づいたはずのユリウスの日は正午に始まります。 12:00時間。
そして今、あなたは、次のようにそれを実装することができ、
import java.time.{ZonedDateTime, LocalDateTime}
def julianDateToZonedDateTime(julianDate: Double): ZonedDateTime = {
val julianDayNumber = math.floor(julianDate).toLong
val julianDayFraction = julianDate - julianDayNumber
val julianDayFractionToNanoSeconds = math.floor(julianDayFraction * 24 * 60 * 60 * math.pow(10, 9)).toLong
val bcEraDateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:z:G")
val julianDateStartDate = ZonedDateTime.parse("4714-11-24 12:00:00:GMT:BC", bcEraDateFormat)
val zonedDateTime = julianDateStartDate.plusDays(julianDayNumber).plusNanos(julianDayFractionToNanoSeconds)
zonedDateTime
}
val yourJulianDate: Double = 2456293.520833
val zonedDateTime = julianDateToZonedDateTime(yourJulianDate)
// 2013-01-01T00:29:59.971206486Z[GMT]
This Wikipedia article請求ユリウス日 - 2456293.520833
は2013-01-01T00:30:00[GMT]
されるように。
ここでは、この記事で最も近い秒に近似しているか、両方のカレンダーの相違により計算が0.0288秒に分岐しています。
最後に、必要に応じて四捨五入を追加するか、正確な値を使用するかを決めることができます。
これはJavaに基づいていますが、このコードをScalaに含めることもできます。http://stackoverflow.com/questions/3017954/convert-a-julian-date-to-regular-calendar-date – Shankar
@Siva「ユリウス暦」とはどういう意味ですか?意味は過負荷で、異なる人々によって異なって使用されます。あなたの質問を編集して、例文列の正確なコピーを提供してください。 –
@Basil、私は7桁の日付を意味しました。私はしかし、私の質問を編集しました。 – Siva