toDateTime method
Returns a UTC DateTime object that corresponds to this Julian date.
Implementation
DateTime toDateTime() {
final d2 = value + 0.5;
final Z = d2.floor();
final alpha = ((Z - 1867216.25) / 36524.25).floor();
final A = Z + 1 + alpha - (alpha ~/ 4);
final B = A + 1524;
final C = ((B - 122.1) / 365.25).floor();
final D = (365.25 * C).floor();
final E = ((B - D) / 30.6001).floor();
// For reference: the fractional day of the month can be
// calculated as follows:
//
// double day = B - D - (int)(30.6001 * E) + F;
final month = (E <= 13) ? (E - 1) : (E - 13);
final year = (month >= 3) ? (C - 4716) : (C - 4715);
final jdJan01 = Julian.fromYearAndDoy(year, 1.0);
final doy = value - jdJan01.value; // zero-relative
final r = doy - doy.floor();
final h = r / 24.0;
final m = h / 60.0;
final s = m / 60.0;
final ms = s / 1000.0;
final ks = ms / 1000.0;
final dtJan01 = DateTime(year, 1, 1, 0, 0, 0);
return dtJan01.add(
Duration(
days: doy.floor(),
hours: h.floor(),
minutes: m.floor(),
seconds: s.floor(),
milliseconds: ms.floor(),
microseconds: ks.floor(),
),
);
}