繁体   English   中英

为什么在打印时比较这两个日期在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'

完全困惑为什么看起来相同但比较失败的日期。

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

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

type(d2)
<class 'str'>

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

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

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

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

您可以将d1转换为date d1 = datetime.date(2019, 4, 30) 这样d2和d1将相等。

你应该做:

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

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字符串的求值结果都相同,因此下面的返回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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM