2011-06-20 333 views

回答

91

如果你想只比較日期,

yourdatetime.date() < datetime.today().date() 

或者說,很明顯,

yourdatetime.date() == datetime.today().date() 

如果要檢查他們相同日期。

The documentation通常是有幫助的。它通常也是python thing_i_have_a_question_about的第一個谷歌結果。除非你的問題是關於一個名爲「蛇」的函數/模塊。

基本上,datetime模塊有三種類型的用於存儲時間點:

  • date年,月,月的一天
  • time小時,分鐘,秒,毫秒,時區信息
  • datetime結合日期和時間。它有方法date()time()以獲得對應的datetime對象,並且有一個方便的combine函數可將datetime組合成一個datetime
23
  • 如果你需要比較月份中只有一天,而不是你可以使用下面的代碼:如果您需要檢查兩個日期之間的差異是可以接受的,那麼你可以使用

    if yourdate.day == datetime.today().day: 
        # do something 
    
  • timedelta

    if (datetime.today() - yourdate).days == 0: 
        #do something 
    
  • 如果你想比較日期部分只比你可以簡單地使用:

    from datetime import datetime, date 
    if yourdatetime.date() < datetime.today().date() 
        # do something 
    

注意timedelta的格式如下:

datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]]) 

所以,你可以在天,秒,毫秒,分鐘等取決於你真正需要檢查DIFF:

from datetime import datetime 
if (datetime.today() - yourdate).days == 0: 
    #do something 

在你的情況,當你需要檢查兩個日期是完全一樣的,你可以使用timedelta(0):

from datetime import datetime, timedelta 
if (datetime.today() - yourdate) == timedelta(0): 
    #do something 
+1

'.day'是日常的-這個月。因此,8月12日與12月12日使用你的第一部分代碼「相等」。這可能不是OP想要的行爲。 – trutheality

+0

@trutheality - 是的,我在編輯問題之前就開始寫我的答案,所以我無法理解他確切需要什麼,這就是爲什麼我爲此提供了幾個選項。 –

+0

快速提示:datetime對象具有一個名爲' (''''),並且timedelta對象有一個名爲'days'(帶有's')的屬性,以防人們發現自己的語法不起作用。 –

2

您可以設置小時,分鐘,秒和毫秒,無論你喜歡

datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0) 

但trutheality的答案很可能是最好的時候,他們都爲零,你可以直接比較.date() S的時代

也許是快但如果你要比較數百日期時間的,因爲你只需要執行一次replace() VS上百個電話給date()

+0

如果它不涉及突變,我會爲此投票。然而,您可以通過創建您正在比較的日期時間對象的克隆來修改此方法,然後通過刪除帶有分日分辨率的字段來修改它們,然後比較這些副本。 – ninjagecko

+1

@ninja,它不會變異。 replace()返回一個新的datetime對象,就像str.replace()一樣 –

2
all(getattr(someTime,x)==getattr(today(),x) for x in ['year','month','day']) 

每個人都應該比較使用.date(),但在我離開這個方法爲例,以防有人想,例如,按月或按分鐘比較的東西,等

相關問題