2009-11-02 114 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)”可能是下个月和前一个月的最后时刻的差异。

相关问题