5

Как сравнить две даты?

39

Как сравнить две даты в Python, чтобы определить, какая из них позже?

Я пытаюсь проверить, не прошла ли текущая дата последнюю дату из списка, который я создаю, с датами праздников. Если текущая дата больше последней даты в этом списке, мне нужно автоматически отправить электронное письмо администратору с напоминанием обновить файл holiday.txt.

Как правильно реализовать это сравнение дат в Python?

5 ответ(ов)

6

Вы можете использовать метод datetime из модуля datetime и оператор < для сравнения объектов datetime. Вот пример, который демонстрирует это:

from datetime import datetime, timedelta

# Определяем время в прошлом (один день назад)
past = datetime.now() - timedelta(days=1)
# Определяем текущее время
present = datetime.now()

# Сравниваем past и present
print(past < present)  # Вывод: True

# Сравниваем фиксированную дату в будущем с текущей
print(datetime(3000, 1, 1) < present)  # Вывод: False

# Находим разницу между текущим временем и датой 4 апреля 2000 года
time_difference = present - datetime(2000, 4, 4)
print(time_difference)  # Вывод: datetime.timedelta(4242, 75703, 762105)

Таким образом, вы можете использовать оператор <, чтобы определить, предшествует ли одна дата другой, и вычислять интервалы времени с помощью вычитания объектов datetime.

1

Вы можете использовать модуль time для обработки строковых представлений дат. Вот пример, как это сделать:

Предположим, у вас есть начальные даты в виде строк:

date1 = "31/12/2015"
date2 = "01/01/2016"

Чтобы преобразовать их в формат даты Python, вы можете использовать time.strptime() следующим образом:

import time

newdate1 = time.strptime(date1, "%d/%m/%Y")
newdate2 = time.strptime(date2, "%d/%m/%Y")

После преобразования вы можете сравнивать даты. Результаты будут следующими:

  • newdate1 > newdate2 вернёт False
  • newdate1 < newdate2 вернёт True

Таким образом, данный подход позволяет вам эффективно сравнивать даты в строковом формате, преобразовав их в подходящий объект для сравнения.

0

Другие ответы, использующие datetime и сравнения, также работают для времени без указания даты.

Например, чтобы проверить, больше или меньше текущее время, чем 8:00 утра, можно использовать следующий код:

import datetime

eight_am = datetime.time(8, 0, 0)  # Время без даты

А затем можно сравнить с текущим временем:

datetime.datetime.now().time() > eight_am  

Что вернет True, если текущее время больше 8:00.

0

В Python, который является одним из самых простых языков, сравнивать даты довольно просто, так как операторы <, >, и == прекрасно работают с объектами datetime. Каждый из этих операторов имеет своё значение в Python:

  • < означает, что дата раньше первой.
  • > означает, что дата позже.
  • == означает, что даты равны.

Для вашего случая вы можете использовать следующий код:

import datetime

date = datetime.datetime(2000, 1, 1)  # Замените на нужную дату
now = datetime.datetime.now()  # Это выражение позволяет получить текущую дату и время

if date < now:
    print('прошлое')
elif date > now:
    print('будущее')
else:
    print('настоящее')
# В данном случае будет напечатано "прошлое"

Таким образом, вы легко сможете определить, находится ли указанная дата в прошлом, будущем или настоящем.

0

Ваш код выглядит вполне нормально, и я рад помочь. Вот перевод и объяснение вашего кода на русском языке в стиле ответа на StackOverflow.

import datetime
from dateutil.parser import parse

# Считываем список праздничных дат с использованием генератора
with open('holiday.txt') as f:
    holiday_dates = (parse(line.strip()) for line in f)

# Получаем текущую дату
today = datetime.datetime.now().date()

# Проверяем, прошла ли текущая дата после последней праздничной даты
if today > max(holiday_dates).date():
    # Отправляем email администратору
    print("Пожалуйста, обновите файл holiday.txt")

В этом коде мы используем генератор для чтения праздничных дат, что позволяет нам поступательно извлекать распарсенные даты по одной. Затем мы используем функцию max(), чтобы найти последнюю праздничную дату и сравниваем её с текущей датой. Мы также применяем метод date(), чтобы преобразовать объекты datetime в объекты date, что позволяет сравнивать их напрямую с переменной today.

Обратите внимание, что метод dateutil.parser.parse() способен обрабатывать более широкий спектр форматов дат, чем datetime.datetime.strptime(), поэтому, возможно, вам не придется указывать строку формата для дат в вашем файле. Тем не менее, если вы знаете точный формат дат в вашем файле, вы всё равно можете использовать strptime(), если это вам удобнее.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь