为什么在打印时比较这两个日期在python中失败

时间:2019-04-30 14:40:07

标签: python python-2.x

我正在尝试在python中比较2个日期,当我打印日期相同时,但是比较失败。

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 个答案:

答案 0 :(得分:2)

它们不一样。您可以通过检查其类型进行测试

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

type(d2)
<class 'str'>

由于日期时间对象具有返回字符串的__repr__方法,因此打印d1会为您提供相同的字符串。

答案 1 :(得分:1)

这里的问题是您正在比较datetime对象和字符串。为了进行有效的比较,您应该使用datetime.datetime.strptime来解析d2,然后进行比较:

import datetime
d2 = '2019-04-30'
d2_datetime = datetime.datetime.strptime(d2, '%Y-%m-%d')

现在,如果检查是否相等,则会看到两个实例相同:

datetime.date.today() == d2_datetime.date()
# True

答案 2 :(得分:0)

因为python是一种强类型的语言。您正在将字符串(d2)与日期对象(d1)比较。这就是为什么它们不相等的原因。

您可以隐藏d1到目前为止的d1 = datetime.date(2019, 4, 30)。这样d2和d1将相等。

答案 3 :(得分:0)

因为其中一个是字符串,另一个是日期格式,并且日期格式和字符串不能与值相同。

答案 4 :(得分:0)

您应该这样做:

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

答案 5 :(得分:0)

d1d2都是不同类型的变量,因此比较失败,如下所示

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'

要比较它们,请确保它们都是相同的类型,然后将这些值进行比较,例如,由于两个datetime字符串的计算结果均是相同的datetime对象,因此以下返回True

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