2016-08-26 42 views
3

我想比較兩個日期時間對象,但忽略了一年。例如,給定是否有直接的方式來忽略python datetime對象的部分?

a = datetime.datetime(2015,07,04,01,01,01) 
b = datetime.datetime(2016,07,04,01,01,01) 

我希望a == b通過忽略年來返回True。做這樣的比較,我想我可以創建新的datetime對象與同年,如:

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的。是否有更直接的方法來進行比較,比如我所要求的?

我正在使用python 3.4。

回答

5

嘗試:

a.replace(year=1,microsecond=0) == b.replace(year=1,microsecond=0) 
+1

不夠明確。 ''= a.dattime.now()''b = dt.datetime.now()''a.replace(year = 1)== b.replace(year = 1)'結果是微秒造成的錯誤 – Alexander

+0

@亞歷山大你是對的。答案已更新。 – acw1668

8
(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] 
1
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,有一個區別。

3

您也可以考慮比較格式化的日期字符串,其中包含您希望包含在比較中的字段。這使您在使用縮短版本的字段時可以稍微明確一些(而不是訪問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 
0
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 
相關問題