Получить диапазон дат и времени между двумя датами

Я реализовал приведенный ниже код, чтобы получить диапазон дат:

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....

Любая помощь будет оценена по достоинству.

Что должно произойти, если текущий день не 19, 28, 29, 30 или 31?

SIGHUP 19.06.2024 18:59

Никаких действий, можем ли мы сосредоточиться на логике, чтобы получить диапазон дат с интервалом в 2 часа?

emiley mille 19.06.2024 19:07
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
87
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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-го диапазона даты и времени в другом списке, и обоих этих списков в одном списке?

emiley mille 21.06.2024 13:03

Просто используйте list(pd.date_range("2024-06-18 00:00", "2024-06-19 02:00", freq = "2h")), чтобы получить все даты в списке. Если вам нужен список для циклического повторения, вы можете напрямую использовать объект DatetimeIndex.

Leonel Quiroz 22.06.2024 20:12

Другие вопросы по теме