fromDate static method
BadiDate from a DateTime object Optional parameter double longitude, latitude, altitude for the sunset time
Implementation
static BadiDate fromDate(DateTime gregorianDate,
{double? longitude, double? latitude, double? altitude}) {
// we convert to utc to avoid daylight saving issues
final dateTime = DateTime.utc(
gregorianDate.year, gregorianDate.month, gregorianDate.day);
if (dateTime.isAfter(DateTime.utc(2065, 3, 19))) {
throw UnsupportedError('Dates after 2064-03-19 are not supported yet.');
}
final isAfterSunset = gregorianDate.isAfter(_calculateSunSet(gregorianDate,
longitude: longitude, latitude: latitude, altitude: altitude));
final date = isAfterSunset ? dateTime.add(Duration(days: 1)) : dateTime;
final badiYear = date.year - YEAR_ZERO_IN_GREGORIAN;
final isBeforeNawRuz =
date.isBefore(DateTime.utc(date.year, 3, getDayOfNawRuz(badiYear)));
if (!isBeforeNawRuz) {
final doy =
date.difference(DateTime.utc(date.year, 3, getDayOfNawRuz(badiYear)));
// +1 because naw ruz has a doy of 1 but a difference of 0
return _fromYearAndDayOfYear(
year: badiYear,
doy: doy.inDays + 1,
longitude: longitude,
latitude: latitude,
altitude: altitude);
}
final doy = date.difference(
DateTime.utc(date.year - 1, 3, getDayOfNawRuz(badiYear - 1)));
return _fromYearAndDayOfYear(
year: badiYear - 1,
doy: doy.inDays + 1,
longitude: longitude,
latitude: latitude,
altitude: altitude);
}