为什么在 python 中比较这两个日期在打印时失败,它们是相同的

Why does comparing these 2 dates fail in python when printed they are the same

我正在尝试比较 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'

完全不明白为什么日期看起来一样但比较失败。

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

您可以将 d1 隐藏到日期 d1 = datetime.date(2019, 4, 30)。这样 d2 和 d1 就会相等。

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

这里的问题是您正在比较一个 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

你应该做的:

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

它们不一样。你可以通过检查它们的类型来测试它

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

type(d2)
<class 'str'>

打印 d1 给你相同的字符串,因为 datetime 对象有一个 __repr__ 方法,returns 字符串。

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'

要比较它们,请确保两者的类型相同,然后比较值,例如下面的 returns 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