calendarDateTime function

CalendarDateTime calendarDateTime(
  1. double jd, {
  2. Calendar? calendar,
})

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,
  );
}