Я реализовал приведенный ниже код, чтобы получить диапазон дат:
from datetime import timedelta, date,datetime
def daterange(date1, date2):
# Iterate over the range of days between date1 and date2
for n in range(int((date2 - date1).days) + 1):
# Yield each date within the range
yield date1 + timedelta(n)
##Logic to fetch data in daterange
current_date = datetime.today()
# day = int(current_date.strftime('%d'))
day = 19
year = int(current_date.strftime('%Y'))
month = int(current_date.strftime('%m'))
if str(day) == '19':
# Define the start date
start_dt = date(year, month, 18)
# Define the end date
end_dt = date(year, month, day)
elif str(day) == '28' or str(day) == '30' or str(day) == '31' or str(day) == '29':
# Define the start date
start_dt = date(year, month, 16)
# Define the end date
end_dt = date(year, month, day)
# Iterate over the range of dates generated by the daterange function
for dt in daterange(start_dt, end_dt):
# date in the format YYYY-MM-DD
dated = dt.strftime("%Y-%m-%d")
startdate = str(dated) + 'T00:00:00Z'
enddate = str(dated) + 'T03:00:00Z'
print(startdate)
print(enddate)
Это дает ниже вывод -
2024-06-18
2024-06-18T00:00:00Z
2024-06-18T03:00:00Z
2024-06-19
2024-06-19T00:00:00Z
2024-06-19T03:00:00Z
Я хочу вернуть этот диапазон дат с интервалом в два часа для каждого дня: Ожидаемый результат -
2024-06-18T00:00:00Z
2024-06-18T02:00:00Z
2024-06-18T02:00:00Z
2024-06-18T04:00:00Z
2024-06-18T04:00:00Z
2024-06-18T06:00:00Z
2024-06-18T06:00:00Z
2024-06-18T08:00:00Z......
2024-06-18T22:00:00Z
2024-06-19T00:00:00Z......
2024-06-19T00:00:00Z
2024-06-19T02:00:00Z....
Любая помощь будет оценена по достоинству.
Никаких действий, можем ли мы сосредоточиться на логике, чтобы получить диапазон дат с интервалом в 2 часа?
Я думаю, это то, что вы ищете:
from datetime import datetime, timedelta
def dates(start, end):
def normalise(d):
return datetime(d.year, d.month, d.day)
_start = normalise(start)
_end = normalise(end)
while _start < _end:
yield _start
_start += timedelta(hours=2)
if __name__ == "__main__":
today = datetime.today()
for d in dates(today, today+timedelta(days=1)):
print(d.isoformat()+"Z")
Это начинается с текущего дня, игнорируя компонент времени, и продолжает создавать объекты datetime с интервалом в 2 часа.
например.,
2024-06-19T00:00:00Z
2024-06-19T02:00:00Z
2024-06-19T04:00:00Z
2024-06-19T06:00:00Z
2024-06-19T08:00:00Z
2024-06-19T10:00:00Z
2024-06-19T12:00:00Z
2024-06-19T14:00:00Z
2024-06-19T16:00:00Z
2024-06-19T18:00:00Z
2024-06-19T20:00:00Z
2024-06-19T22:00:00Z
Вы можете использовать функцию pandas pd.date_range()
, с помощью которой можно указать частоту, например:
pd.date_range("2024-06-18 00:00", "2024-06-19 02:00", freq = "2h")
Это возвращает объект DatetimeIndex, который содержит даты в объектах Timestamp, но если вам нужно, вы можете использовать метод to_pydatetime()
для получения дат в объектах datetime.
pd.date_range("2024-06-18 00:00", "2024-06-19 02:00", freq = "2h").to_pydatetime()
Могу ли я создать список списков для всех значений, например, для всего 18-го диапазона даты и времени в списке и 19-го диапазона даты и времени в другом списке, и обоих этих списков в одном списке?
Просто используйте list(pd.date_range("2024-06-18 00:00", "2024-06-19 02:00", freq = "2h")), чтобы получить все даты в списке. Если вам нужен список для циклического повторения, вы можете напрямую использовать объект DatetimeIndex.
Что должно произойти, если текущий день не 19, 28, 29, 30 или 31?