2009-11-02 160 views

回答

16

使用一個簡單的技巧:將日期設置爲下一個月的第一個日期,然後按照您的需要減去一秒/小時/天/秒。

+1

+1:始終有效 - 永遠不需要知道當月的天數。或者一年,就此而言。 – 2009-11-02 16:03:50

1
import datetime 

def eom(dt): 
    sometime_next_month= dt.replace(day=1) + datetime.timedelta(days=31) 
    start_of_next_month= sometime_next_month.replace(day=1,hour=0,minute=0,second=0) 
    return start_of_next_month - datetime.timedelta(seconds=1) 


>>> eom(datetime.datetime(1972, 2, 1, 23, 50, 50)) 
datetime.datetime(1972, 2, 29, 23, 59, 59) 
>>> eom(datetime.datetime(1980, 12, 31)) 
datetime.datetime(1980, 12, 31, 23, 59, 59) 
+1

你爲什麼歧視十二月? – SilentGhost 2009-11-02 20:55:08

+0

你說得對。我的印象是datetime.datetime正在做*正確的事*,但顯然我錯了。我會在SO中找到我在另一個答案中編寫的代碼。 – tzot 2009-11-02 22:21:51

0
selected_date = date(some_year, some_month, some_day) 

if selected_date.month == 12: # December 
    last_day_selected_month = date(selected_date.year, selected_date.month, 31) 
else: 
    last_day_selected_month = date(selected_date.year, selected_date.month + 1, 1) - timedelta(days=1) 

其中「timedelta(天= 1)」可能是下個月和前一個月的最後時刻的差異。

相關問題