Почему сравнение этих двух дат не выполняется в python, когда они совпадают - PullRequest
1 голос
/ 30 апреля 2019

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

2 голосов
/ 30 апреля 2019

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

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

type(d2)
<class 'str'>

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

1 голос
/ 30 апреля 2019

Проблема здесь в том, что вы сравниваете 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
0 голосов
/ 30 апреля 2019

И 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 голосов
/ 30 апреля 2019

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

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

0 голосов
/ 30 апреля 2019

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

0 голосов
/ 30 апреля 2019

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

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

...