Я пытаюсь сравнить 2 даты в Python, когда я печатаю даты, они совпадают, но сравнение не удается.
import datetime
today = datetime.date.today()
print today
print '2019-04-30'
d1 = today
d2 = '2019-04-30'
if d1 == d2:
print 'match'
else:
print 'nomatch'
Совершенно запутано, почему даты, которые выглядят одинаково, но сравнение не удается.
6 ответов
Они не одинаковы. Вы можете проверить это, проверив их типы
type(d1)
<class 'datetime.date'>
type(d2)
<class 'str'>
Печать d1 дает ту же строку, потому что объекты datetime имеют метод __repr__
, который возвращает строку.
Ты должен сделать:
Today = str (datetime.date.today ())
Потому что Python - это строго типизированный язык. Вы сравниваете строку (d2) с объектом даты (d1). Вот почему они не равны.
Вы можете конвертировать d1 в дату d1 = datetime.date(2019, 4, 30)
. Таким образом, d2 и d1 будут равны.
И d1
, и d2
являются переменными разных типов, поэтому сравнение не выполняется, как показано ниже
import datetime
today = datetime.date.today()
print today
print '2019-04-30'
d1 = today
d2 = '2019-04-30'
#Both types are different, as seen below
print type(d1)
#<type 'datetime.date'>
print type(d2)
#<type 'str'>
if d1 == d2:
print 'match'
else:
print 'nomatch'
Чтобы сравнить их, убедитесь, что оба имеют одинаковые типы, и затем значения будут сравниваться, например, приведенное ниже возвращает значение True, поскольку обе строки datetime оценивают один и тот же объект datetime
import datetime
d1 = datetime.datetime.strptime('2019-04-30', '%Y-%m-%d')
d2 = datetime.datetime.strptime('04-30-2019', '%m-%d-%Y')
print(d1 == d2)
#True
Поскольку один из них является строкой, а другой - форматом даты, формат даты и строка не могут совпадать со значением.
Проблема в том, что вы сравниваете datetime
объект и строку. Для правильного сравнения вы должны проанализировать d2
, используя datetime.datetime.strptime
а> а потом сравни:
import datetime
d2 = '2019-04-30'
d2_datetime = datetime.datetime.strptime(d2, '%Y-%m-%d')
Теперь, если вы проверите равенство, вы увидите, что оба экземпляра одинаковы:
datetime.date.today() == d2_datetime.date()
# True
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.