我正在尝试在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'
完全困惑为什么日期看起来相同但比较失败。
答案 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)
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'
要比较它们,请确保它们都是相同的类型,然后将这些值进行比较,例如,由于两个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