convertToEthiopianDate static method

EthiopianDateTime convertToEthiopianDate(
  1. DateTime datetime
)

Implementation

static EthiopianDateTime convertToEthiopianDate(DateTime datetime) {
  weekDays = datetime.weekday;
  if (DateTime.january >= datetime.month ||
      datetime.month <= DateTime.september) {
    if (datetime.month != DateTime.september) {
      year = datetime.year - 8;
    } else if (datetime.month == DateTime.september &&
        (datetime.year % 4 + 1) != 0 &&
        datetime.day < 11) {
      year = datetime.year - 8;
    } else if (datetime.month == DateTime.september &&
        (datetime.year + 1) % 4 == 0 &&
        datetime.day < 12) {
      year = datetime.year - 8;
    } else {
      year = datetime.year - 7;
    }
  } else {
    year = datetime.year - 7;
  }

  var tempYear = year - 1;

  if (DateTime.january == datetime.month) {
    if (tempYear % 4 == 3) {
      if (datetime.day < 10) {
        month = 4;
        date = datetime.day + 31 - 10;
      } else {
        month = 5;
        date = datetime.day - 9;
      }
    } else {
      if (datetime.day < 9) {
        month = 4;
        date = datetime.day + 31 - 9;
      } else {
        month = 5;
        date = datetime.day - 8;
      }
    }
  } else if (DateTime.february == datetime.month) {
    if (tempYear % 4 == 3) {
      if (datetime.day < 10) {
        month = 5;
        date = datetime.day + 31 - 9;
      } else {
        month = 6;
        date = datetime.day - 8;
      }
    } else {
      if (datetime.day < 8) {
        month = 5;
        date = datetime.day + 31 - 8;
      } else {
        month = 6;
        date = datetime.day - 7;
      }
    }
  } else if (DateTime.march == datetime.month) {
    if (datetime.day < 10) {
      month = 6;
      date = datetime.day + 29 - 8;
    } else {
      month = 7;
      date = datetime.day - 9;
    }
  } else if (DateTime.april == datetime.month) {
    if (datetime.day < 9) {
      month = 7;
      date = datetime.day + 30 - 8;
    } else {
      month = 8;
      date = datetime.day - 8;
    }
  } else if (DateTime.may == datetime.month) {
    if (datetime.day < 9) {
      month = 8;
      date = datetime.day + 30 - 8;
    } else {
      month = 9;
      date = datetime.day - 8;
    }
  } else if (DateTime.june == datetime.month) {
    if (datetime.day < 8) {
      month = 9;
      date = datetime.day + 31 - 8;
    } else {
      month = 10;
      date = datetime.day - 7;
    }
  } else if (DateTime.july == datetime.month) {
    if (datetime.day < 8) {
      month = 10;
      date = datetime.day + 30 - 7;
    } else {
      month = 11;
      date = datetime.day - 7;
    }
  } else if (DateTime.august == datetime.month) {
    if (datetime.day < 7) {
      month = 11;
      date = datetime.day + 31 - 7;
    } else {
      month = 12;
      date = datetime.day - 6;
    }
  } else if (DateTime.september == datetime.month) {
    if (tempYear % 4 == 3) {
      if (datetime.day < 6) {
        month = 12;
        date = datetime.day + 31 - 6;
      } else {
        if (datetime.day <= 11) {
          month = 13;
          date = datetime.day - 5;
        } else {
          month = 1;
          date = datetime.day - 11;
        }
      }
    } else {
      if (datetime.day < 6) {
        month = 12;
        date = datetime.day + 31 - 6;
      } else {
        if (datetime.day <= 11) {
          month = 13;
          date = datetime.day - 5;
        } else {
          month = 1;
          date = datetime.day - 11;
        }
      }
    }
  } else if (DateTime.october == datetime.month) {
    if (tempYear % 4 == 3) {
      if (datetime.day < 12) {
        month = 1;
        date = datetime.day + 30 - 11;
      } else {
        month = 2;
        date = datetime.day - 11;
      }
    } else {
      if (datetime.day < 11) {
        month = 1;
        date = datetime.day + 30 - 10;
      } else {
        month = 2;
        date = datetime.day - 10;
      }
    }
  } else if (DateTime.november == datetime.month) {
    if (tempYear % 4 == 3) {
      if (datetime.day < 11) {
        month = 2;
        date = datetime.day + 31 - 11;
      } else {
        month = 3;
        date = datetime.day - 10;
      }
    } else {
      if (datetime.day < 10) {
        month = 2;
        date = datetime.day + 31 - 10;
      } else {
        month = 3;
        date = datetime.day - 9;
      }
    }
  } else if (DateTime.december == datetime.month) {
    if (tempYear % 4 == 3) {
      if (datetime.day < 11) {
        month = 3;
        date = datetime.day + 30 - 10;
      } else {
        month = 4;
        date = datetime.day - 10;
      }
    } else {
      if (datetime.day < 10) {
        month = 3;
        date = datetime.day + 30 - 9;
      } else {
        month = 4;
        date = datetime.day - 9;
      }
    }
  }

  String? timeRange;

  if ((datetime.hour >= 6 && datetime.hour < 18)) {
    if (datetime.hour == 6 || (datetime.hour >= 7 && datetime.hour <= 11)) {
      timeRange = "Tewat";
    } else {
      timeRange = "Qen";
    }
  } else {
    if (datetime.hour == 18 || (datetime.hour >= 18 && datetime.hour <= 23)) {
      timeRange = "Mata";
    } else {
      timeRange = "Lelit";
    }
  }

  int hour = datetime.hour;

  var input = DateTime(datetime.year, datetime.month, datetime.day,
      datetime.hour, datetime.minute, 0);

  var minDateMidNight =
      DateTime(datetime.year, datetime.month, datetime.day, 00, 00, 00);
  var maxDateMidNight =
      DateTime(datetime.year, datetime.month, datetime.day, 05, 59, 59);

  var minDateDay =
      DateTime(datetime.year, datetime.month, datetime.day, 06, 00, 00);
  var maxDateDay =
      DateTime(datetime.year, datetime.month, datetime.day, 18, 59, 59);

  var minDateNight =
      DateTime(datetime.year, datetime.month, datetime.day, 19, 00, 00);
  var maxDateNight =
      DateTime(datetime.year, datetime.month, datetime.day, 23, 59, 59);

  if (input.isAfter(minDateMidNight) && input.isBefore(maxDateMidNight)) {
    hour = hour + 6;
    date--;
  }
  if (input.isAfter(minDateDay) && input.isBefore(maxDateDay)) {
    hour = hour - 6;
  }
  if (input.isAfter(minDateNight) && input.isBefore(maxDateNight)) {
    hour = hour - 18;
  }

  if (hour == 0) hour = 12;

  EthiopianDateTime ethiopianDate = EthiopianDateTime(
      year,
      month,
      date,
      hour,
      datetime.minute,
      datetime.second,
      datetime.millisecond,
      datetime.microsecond,
      timeRange);
  return ethiopianDate;
}