calendarDateTime function
The date and time of the Julian day jd.
When calendar is omitted it is chosen as in julianDay (see
gregorianReformJulianDay). The result is rounded to the millisecond.
Implementation
CalendarDateTime calendarDateTime(double jd, {Calendar? calendar}) {
final cal =
calendar ??
(jd >= gregorianReformJulianDay ? Calendar.gregorian : Calendar.julian);
var dayNumber = (jd + 0.5).floor();
var millis = ((jd + 0.5 - dayNumber) * 86400000).round();
if (millis == 86400000) {
// Zaokrąglenie przeskoczyło na północ następnego dnia.
dayNumber += 1;
millis = 0;
}
final (year, month, day) = _civilDate(dayNumber, cal);
return CalendarDateTime(
year,
month,
day,
hour: millis ~/ 3600000,
minute: millis ~/ 60000 % 60,
second: millis % 60000 / 1000,
calendar: cal,
);
}