Я пытаюсь сравнить 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'

Совершенно запутано, почему даты, которые выглядят одинаково, но сравнение не удается.

1
Sean 30 Апр 2019 в 17:40

6 ответов

Лучший ответ

Они не одинаковы. Вы можете проверить это, проверив их типы

type(d1)
<class 'datetime.date'>

type(d2)
<class 'str'>

Печать d1 дает ту же строку, потому что объекты datetime имеют метод __repr__, который возвращает строку.

2
Adarsh Chavakula 30 Апр 2019 в 14:46

Ты должен сделать:

Today = str (datetime.date.today ())

0
Abd El Kodous Souissi 30 Апр 2019 в 14:44

Потому что Python - это строго типизированный язык. Вы сравниваете строку (d2) с объектом даты (d1). Вот почему они не равны.

Вы можете конвертировать d1 в дату d1 = datetime.date(2019, 4, 30). Таким образом, d2 и d1 будут равны.

0
Александр Свито 30 Апр 2019 в 14:42

И 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
0
Devesh Kumar Singh 30 Апр 2019 в 14:48

Поскольку один из них является строкой, а другой - форматом даты, формат даты и строка не могут совпадать со значением.

1
sanyash 30 Апр 2019 в 14:44