class_docstr: Mixin to provide interface to work with croniter.
class_docstr_tok: ["Mixin","to","provide","interface","to","work","with","croniter","."]
docstr: Get the first schedule before specified time, with DST fixed.
docstr_tok: ["Get","the","first","schedule","before","specified","time",",","with","DST","fixed","."]
code: def _get_prev(self, current: DateTime) -> DateTime:
      """Get the first schedule before specified time, with DST fixed."""
      naive = make_naive(current, self._timezone)
      cron = croniter(self._expression, start_time=naive)
      scheduled = cron.get_prev(datetime.datetime)
      if not _covers_every_hour(cron):
          return convert_to_utc(make_aware(scheduled, self._timezone))
      delta = naive - scheduled
      return convert_to_utc(current.in_timezone(self._timezone) - delta)
  
file_path: airflow/airflow/timetables/_cron.py
imports: from __future__ import annotations
  import datetime
  from typing import TYPE_CHECKING, Any
  from cron_descriptor import CasingTypeEnum, ExpressionDescriptor, FormatException, MissingFieldException
  from croniter import CroniterBadCronError, CroniterBadDateError, croniter
  from airflow.exceptions import AirflowTimetableInvalid
  from airflow.utils.dates import cron_presets
  from airflow.utils.timezone import convert_to_utc, make_aware, make_naive, parse_timezone
label_desc: Use image node_id 6 for calling the CronMixin obj's underlying member method code with example usage: obj._get_prev(current) and returns: convert_to_utc, convert_to_utc