import datetime
def DaysOfMonth( dt ): #dt的type是datetime or date皆可
#先加一個月,避免邊界值問題。
if dt.day < 15 :
dt = dt+datetime.timedelta(31)
else:
dt = dt+datetime.timedelta(20)
dt = dt+datetime.timedelta(days=(-dt.day))#再扣掉天數
return dt.day
dt = datetime.datetime(2008,7,4)
print DaysOfMonth(dt)
# output>> 31
dt = datetime.date(2008,7,4)
print DaysOfMonth(dt)
# output>> 31
6 則留言:
你好,你的程序有点错误
比如:
>>> a = datetime.datetime(2009,1,29)
>>> DaysOfMonth(a)
28
>>> a = datetime.datetime(2009,1,2)
>>> DaysOfMonth(a)
31
>>>
主要是边界问题,你纯粹加31
如果他跨越了一个月,那个月的天数少于31天,那计算的就是下个月的天数了
比如下面,计算的是6月份的
>>> a = datetime.datetime(2009,5,31)
>>> DaysOfMonth(a)
30
感謝你的寶貴意見,這段code果然有些問題,我已經修正了~ :)
还有更加简单的
可以用下个月的第一天,减去这个月的第一天,其中的天数就是这个月的天数啊:
a = datetime.datetime(2009,3,1)
b = datetime.datetime(2009,2,1)
c = a - b
则2月的天数就是c.days
嗯 這的確也是個不錯的方法,但是要寫成可以共用的function,還是必須判斷1月、12月的臨界值,所以效率、方法應該是大同小異的:)
I like the way c = a -b , straightforward
張貼留言