我试图比较两个日期时间对象,但忽略了年份。例如,给定
a = datetime.datetime(2015,07,04,01,01,01)
b = datetime.datetime(2016,07,04,01,01,01)
我希望a==b通过忽略年份来返回True。为了进行这样的比较,我想我可以创建具有相同年份的新日期时间对象,比如:
c = datetime.datetime(2014,a.month,a.day,a.hour,a.minute,a.second)
d = datetime.datetime(2014,b.month,b.day,b.hour,b.minute,b.second)
然而,这看起来并不是很像蟒蛇。有没有更直接的方法可以像我所问的那样进行比较?
我使用的是python 3.4。
(a.month, a.day, a.hour, a.minute, a.second ==
b.month, b.day, b.hour, b.minute, b.second)
一种不太明确的方法是比较时间元组中的相应元素:
a.timetuple()[1:6] == b.timetuple()[1:6]
尝试:
a.replace(year=1,microsecond=0) == b.replace(year=1,microsecond=0)
您还可以考虑比较格式化的日期字符串,这些字符串由您希望包含在比较中的字段组成。这允许您在使用字段的缩短版本(而不是访问a.year
、a.month
等(时更加明确
from datetime import datetime
date_string = '%m %d %H %M %S'
a = datetime(2015, 7, 4, 1, 1, 1)
b = datetime(2016, 7, 4, 1, 1, 1)
print(a.strftime(date_string) == b.strftime(date_string)) # True
def cmp(a,b):
return (a > b) - (a < b)
d1=(2015,7,4,1,1,1)
d2=(2016,7,4,1,1,1)
cmp(list(d1)[1:],list(d2)[1:])
返回0-它们相同,即0差异
d1=(2015,7,4,1,1,1)
d2=(2015,2,4,1,1,1)
cmp(list(d1)[1:], list(d2)[1:])
返回-1,则存在差异。
In [70]: a
Out[70]: datetime.datetime(2015, 7, 4, 0, 0)
In [71]: b
Out[71]: datetime.datetime(2016, 7, 4, 0, 0)
In [72]: def my_date_cmp(a, b):
....: return a.replace(year = b.year) == b
....:
In [73]: my_date_cmp(a, b)
Out[73]: True