如果我有两个日期(例如'8/18/2008'
和'9/26/2008'
),那么获得这两个日期之间的天数的最佳方法是什么?
如果您有两个日期对象,则可以减去它们.
from datetime import date d0 = date(2008, 8, 18) d1 = date(2008, 9, 26) delta = d1 - d0 print(delta.days)
文档的相关部分:https: //docs.python.org/library/datetime.html.
使用datetime的力量:
from datetime import datetime date_format = "%m/%d/%Y" a = datetime.strptime('8/18/2008', date_format) b = datetime.strptime('9/26/2008', date_format) delta = b - a print delta.days # that's it
圣诞节前几天:
>>> import datetime >>> today = datetime.date.today() >>> someday = datetime.date(2008, 12, 25) >>> diff = someday - today >>> diff.days 86
这里有更多算术.
你想要datetime模块.
>>> from datetime import datetime, timedelta >>> datetime(2008,08,18) - datetime(2008,09,26) datetime.timedelta(4)
或者其他例子:
>>> import datetime >>> today = datetime.date.today() >>> print(today) 2008-09-01 >>> last_year = datetime.date(2007, 9, 1) >>> print(today - last_year) 366 days, 0:00:00
正如这里指出的那样
from datetime import datetime start_date = datetime.strptime('8/18/2008', "%m/%d/%Y") end_date = datetime.strptime('9/26/2008', "%m/%d/%Y") print abs((end_date-start_date).days)
它也可以很容易地完成arrow
:
import arrow a = arrow.get('2017-05-09') b = arrow.get('2017-05-11') delta = (b-a) print delta.days
供参考:http://arrow.readthedocs.io/en/latest/
没有使用Lib只是纯代码:
#Calculate the Days between Two Date daysOfMonths = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] def isLeapYear(year): # Pseudo code for this algorithm is found at # http://en.wikipedia.org/wiki/Leap_year#Algorithm ## if (year is not divisible by 4) then (it is a common Year) #else if (year is not divisable by 100) then (ut us a leap year) #else if (year is not disible by 400) then (it is a common year) #else(it is aleap year) return (year % 4 == 0 and year % 100 != 0) or year % 400 == 0 def Count_Days(year1, month1, day1): if month1 ==2: if isLeapYear(year1): if day1 < daysOfMonths[month1-1]+1: return year1, month1, day1+1 else: if month1 ==12: return year1+1,1,1 else: return year1, month1 +1 , 1 else: if day1 < daysOfMonths[month1-1]: return year1, month1, day1+1 else: if month1 ==12: return year1+1,1,1 else: return year1, month1 +1 , 1 else: if day1 < daysOfMonths[month1-1]: return year1, month1, day1+1 else: if month1 ==12: return year1+1,1,1 else: return year1, month1 +1 , 1 def daysBetweenDates(y1, m1, d1, y2, m2, d2,end_day): if y1 > y2: m1,m2 = m2,m1 y1,y2 = y2,y1 d1,d2 = d2,d1 days=0 while(not(m1==m2 and y1==y2 and d1==d2)): y1,m1,d1 = Count_Days(y1,m1,d1) days+=1 if end_day: days+=1 return days # Test Case def test(): test_cases = [((2012,1,1,2012,2,28,False), 58), ((2012,1,1,2012,3,1,False), 60), ((2011,6,30,2012,6,30,False), 366), ((2011,1,1,2012,8,8,False), 585 ), ((1994,5,15,2019,8,31,False), 9239), ((1999,3,24,2018,2,4,False), 6892), ((1999,6,24,2018,8,4,False),6981), ((1995,5,24,2018,12,15,False),8606), ((1994,8,24,2019,12,15,True),9245), ((2019,12,15,1994,8,24,True),9245), ((2019,5,15,1994,10,24,True),8970), ((1994,11,24,2019,8,15,True),9031)] for (args, answer) in test_cases: result = daysBetweenDates(*args) if result != answer: print "Test with data:", args, "failed" else: print "Test case passed!" test()