#!/usr/bin/env python3 import unittest from datetime import datetime, timedelta, date from python_utils import print_input_args, print_err_msg_exit def set_cycle_dates(date_start, date_end, incr_cycl_freq): """This file defines a function that, given the start and end dates as date time objects, and a cycling frequency, returns an array of cycle date-hours whose elements have the form YYYYMMDDHH. Here, YYYY is a four-digit year, MM is a two- digit month, DD is a two-digit day of the month, and HH is a two-digit hour of the day. Args: date_start: start date, datetime object date_end: end date, datetime object incr_cycl_freq: cycle frequency increment in hours, an int Returns: A list of dates in a format YYYYMMDDHH """ print_input_args(locals()) freq_delta = timedelta(hours=incr_cycl_freq) # iterate over cycles all_cdates = [] cdate = date_start while cdate <= date_end: cyc = datetime.strftime(cdate, "%Y%m%d%H") all_cdates.append(cyc) cdate += freq_delta return all_cdates class Testing(unittest.TestCase): def test_set_cycle_dates(self): cdates = set_cycle_dates( date_start=datetime(2022, 1, 1, 6), date_end=datetime(2022, 1, 2, 12), incr_cycl_freq=6, ) self.assertEqual( cdates, [ "2022010106", "2022010112", "2022010118", "2022010200", "2022010206", "2022010212", ], )