versiones guia español actualizar python date

guia - ¿Cómo calculo la cantidad de días entre dos fechas usando Python?



qgis español (10)

Aquí hay tres maneras de ir con este problema:

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

Si tengo dos fechas (por ejemplo, ''8/18/2008'' y ''9/26/2008'' ), ¿cuál es la mejor manera de obtener el número de días entre las dos fechas?


Días hasta Navidad:

>>> import datetime >>> today = datetime.date.today() >>> someday = datetime.date(2008, 12, 25) >>> diff = someday - today >>> diff.days 86

Más aritmética here .


Desea el módulo datetime.

>>> from datetime import datetime, timedelta >>> datetime(2008,08,18) - datetime(2008,09,26) datetime.timedelta(4)

O otro ejemplo:

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

Como se señala here


Para calcular fechas y horas hay varias opciones, pero escribiré de manera simple:

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()

Espero eso ayude


Si tiene dos objetos de fecha, solo puede restarlos.

from datetime import date d0 = date(2008, 8, 18) d1 = date(2008, 9, 26) delta = d1 - d0 print delta.days

La sección relevante de los documentos: https://docs.python.org/library/datetime.html


Sin usar Lib solo código puro:

#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()


También se puede hacer fácilmente con arrow :

import arrow a = arrow.get(''2017-05-09'') b = arrow.get(''2017-05-11'') delta = (b-a) print delta.days

Para referencia: http://arrow.readthedocs.io/en/latest/


Usando el poder de 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


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'')

Esto supone, por supuesto, que ya ha verificado que sus fechas están en el formato r''/d+//d+//d+'' .


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)