因为您需要日期范围和特定格式,我建议使用 numpy 进行日期范围创建和计算,然后使用 python datetime 进行如下格式设置:
import numpy as np
import datetime as dt
def dateRange(start='2019-10-01', end='2020-08-28'):
start_date = np.datetime64(start[:-3])
#Add one month to end date so last month is included
end_date = np.datetime64(end[:-3]) + np.timedelta64(1, 'M')
#Create Date Range
date_range = np.arange(start_date, end_date, dtype='datetime64[M]')
#Add 5 AM to start_dates
start_dates = date_range + np.timedelta64(5, 'h')
#Add 1 Month and subrtract 4 hours to 8 PM on last day of month
end_dates = date_range + np.timedelta64(1, 'M') - np.timedelta64(4, 'h')
#Apply Formatting
final_start_dates = [parse_date(np.datetime_as_string(d, unit='s')) for d in start_dates]
final_end_dates = [parse_date(np.datetime_as_string(d, unit='s')) for d in end_dates]
return final_start_dates, final_end_dates
def parse_date(date_string):
#parse numpy date string
date_time = date_string.split('T')
date_parts = date_time[0].split('-')
time_parts = date_time[1][:-1].split(':')
#convert string values to ints
datetime_ints = [int(d) for d in date_parts] + [int(time_parts[0])]
#apply formatting
return dt.datetime(*datetime_ints).strftime('%m/%d/%Y %I:%M:%S %p')
输出:
>>> start,end=dateRange()
>>> start
['10/01/2019 05:00:00 AM', '11/01/2019 05:00:00 AM', '12/01/2019 05:00:00 AM', '01/01/2020 05:00:00 AM', '02/01/2020 05:00:00 AM', '03/01/2020 05:00:00 AM', '04/01/2020 05:00:00 AM', '05/01/2020 05:00:00 AM', '06/01/2020 05:00:00 AM', '07/01/2020 05:00:00 AM', '08/01/2020 05:00:00 AM']
>>> end
['10/31/2019 08:00:00 PM', '11/30/2019 08:00:00 PM', '12/31/2019 08:00:00 PM', '01/31/2020 08:00:00 PM', '02/29/2020 08:00:00 PM', '03/31/2020 08:00:00 PM', '04/30/2020 08:00:00 PM', '05/31/2020 08:00:00 PM', '06/30/2020 08:00:00 PM', '07/31/2020 08:00:00 PM', '08/31/2020 08:00:00 PM']
我认为这就是您对每天生产的问题所寻找的。其实更简单。
def all_dates(start='2019-10-01', end='2019-10-15'):
start_date = np.datetime64(start)
#Add one day to end date so last say is included
end_date = np.datetime64(end) + np.timedelta64(1, 'D')
#Create Date Range
date_range = np.arange(start_date, end_date, dtype='datetime64[D]')
final_start_dates = [parse_date(np.datetime_as_string(d + np.timedelta64(5, 'h'), unit='s')) for d in date_range]
final_end_dates = [parse_date(np.datetime_as_string(d + np.timedelta64(20, 'h'), unit='s')) for d in date_range]
return final_start_dates, final_end_dates
输出:
>>> start, end = all_dates()
>>> start
['10/1/2019 05:00:00 AM', '10/2/2019 05:00:00 AM', '10/3/2019 05:00:00 AM', '10/4/2019 05:00:00 AM', '10/5/2019 05:00:00 AM', '10/6/2019 05:00:00 AM', '10/7/2019 05:00:00 AM', '10/8/2019 05:00:00 AM', '10/9/2019 05:00:00 AM', '10/10/2019 05:00:00 AM', '10/11/2019 05:00:00 AM', '10/12/2019 05:00:00 AM', '10/13/2019 05:00:00 AM', '10/14/2019 05:00:00 AM', '10/15/2019 05:00:00 AM']
>>> end
['10/1/2019 08:00:00 PM', '10/2/2019 08:00:00 PM', '10/3/2019 08:00:00 PM', '10/4/2019 08:00:00 PM', '10/5/2019 08:00:00 PM', '10/6/2019 08:00:00 PM', '10/7/2019 08:00:00 PM', '10/8/2019 08:00:00 PM', '10/9/2019 08:00:00 PM', '10/10/2019 08:00:00 PM', '10/11/2019 08:00:00 PM', '10/12/2019 08:00:00 PM', '10/13/2019 08:00:00 PM', '10/14/2019 08:00:00 PM', '10/15/2019 08:00:00 PM']