LocalDate.fromJulianDay constructor
LocalDate.fromJulianDay(
- int value
Converts a supported Julian day ordinal to its Gregorian date.
Implementation
factory LocalDate.fromJulianDay(int value) {
if (value < minJulianDay || value > maxJulianDay) {
throw RangeError.range(value, minJulianDay, maxJulianDay, 'julianDay');
}
// March-based Gregorian cycles (400 years = 146097 days).
final shifted = value - 1721120, cycle = _floorDiv(shifted, 146097);
final days = shifted - cycle * 146097;
final y = (days - days ~/ 1460 + days ~/ 36524 - days ~/ 146096) ~/ 365;
final dayOfYear = days - (365 * y + y ~/ 4 - y ~/ 100);
final marchMonth = (5 * dayOfYear + 2) ~/ 153;
final day = dayOfYear - (153 * marchMonth + 2) ~/ 5 + 1;
final month = marchMonth + (marchMonth < 10 ? 3 : -9);
return LocalDate._(
y + cycle * 400 + (month <= 2 ? 1 : 0),
month,
day,
value,
);
}