How to calculate number of days between two given dates?
如果我有两个日期(例如,EDOCX1&0)和EDOCX1&1),那么在这两个日期之间,什么是最好的日子数?
如果有两个日期对象,只需减去它们即可。
1 2 3 4 5 6 | 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。
使用日期时间的力量:
1 2 3 4 5 6 | 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 |
圣诞节前几天:
1 2 3 4 5 6 | >>> import datetime >>> today = datetime.date.today() >>> someday = datetime.date(2008, 12, 25) >>> diff = someday - today >>> diff.days 86 |
这里有更多的算术。
您需要datetime模块。
1 2 3 | >>> from datetime import datetime, timedelta >>> datetime(2008,08,18) - datetime(2008,09,26) datetime.timedelta(4) |
或其他示例:
1 2 3 4 5 6 7 8 9 10 | Python 2.5.2 (r252:60911, Feb 22 2008, 07:57:53) [GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin Type"help","copyright","credits" or"license" for more information. >>> 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 |
正如这里指出的
1 2 3 4 | 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) |
它也可以很容易地与
1 2 3 4 5 6 7 | 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,只使用纯代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #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() |
对于计算日期和时间,有几个选项,但我会用简单的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import datetime import dateutil.relativedelta # current time date_and_time = datetime.datetime.now() date_only = date.today() time_only = datetime.datetime.now().time() # calculate date and time result = date_and_time - datetime.timedelta(hours=26, minutes=25, seconds=10) # calculate dates: years (-/+) result = date_only - dateutil.relativedelta.relativedelta(years=10) # months result = date_only - dateutil.relativedelta.relativedelta(months=10) # days result = date_only - dateutil.relativedelta.relativedelta(days=10) # calculate time result = date_and_time - datetime.timedelta(hours=26, minutes=25, seconds=10) result.time() |
希望它有帮助
1 2 3 4 5 6 7 | from datetime import date def d(s): [month, day, year] = map(int, s.split('/')) return date(year, month, day) def days(start, end): return (d(end) - d(start)).days print days('8/18/2008', '9/26/2008') |
当然,这假定您已经验证了日期的格式为
以下是解决此问题的三种方法:
1 2 3 4 5 6 7 8 9 | from datetime import datetime Now = datetime.now() StartDate = datetime.strptime(str(Now.year) +'-01-01', '%Y-%m-%d') NumberOfDays = (Now - StartDate) print(NumberOfDays.days) # Starts at 0 print(datetime.now().timetuple().tm_yday) # Starts at 1 print(Now.strftime('%j')) # Starts at 1 |