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?¿Cómo calculo el número de días entre dos fechas usando Python?
Respuesta
Si tiene dos objetos de fecha, 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 correspondiente de la documentación: https://docs.python.org/library/datetime.html
Usando el poder de fecha y hora:
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
realidad, la clase fecha sería más apropiado en este caso que la fecha y hora. –
@JeremyCantrell Y, sin embargo, incluso ocho años después, 'date' todavía carece de su propio equivalente a' strptime() '. – JAB
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 de fecha y hora.
>>> from datetime import datetime
>>> datetime(2008,08,18) - datetime(2008,09,26)
datetime.timedelta(4)
U 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ñaló here
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)
Es posible que desee ver esto. Tengo estos errores en 2.7.3 Python ejecutando tu ejemplo. Archivo "
@octopusgrabbus El formato La versión recientemente editada debería funcionar. – Christopher
Esto no agrega nada nuevo en comparación con las respuestas dadas 4 años antes. -1. –
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 has verificado que su las fechas están en el formato r'\d+/\d+/\d+'
.
Esto no agrega nada nuevo en comparación con las respuestas dadas 8 años antes. -1. –
La principal diferencia es que la mayoría de las otras respuestas ni siquiera se molestaron en explicar el hecho de que el OP tenía sus fechas como cadenas. Y quienes sí lo hicieron utilizaron en gran medida formateadores más complicados de lo estrictamente necesario. Entonces, la diferencia principal es 'map (int, s.split ('/')) '. No es exactamente innovador, pero una vez más esta pregunta es bastante estúpida básica. Mi respuesta solo muestra otra forma de despellejar al gato. –
También mencionó la validación de que las fechas están en el formato correcto, y dio una expresión regular de validación de primera aproximación. Lo que otros no hicieron –
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
Como referencia: http://arrow.readthedocs.io/en/latest/
Para el cálculo de fechas y horas hay varias opciones, pero voy a escribir de la 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 que ayude
sin utilizar Lib código sólo pura:
#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. ¿Cómo calculo el número de días, menos los domingos, entre dos fechas en C#?
- 2. Número de días entre dos fechas
- 3. ¿Cómo encontrar el número de días entre dos fechas
- 4. Días entre dos fechas en Python
- 5. Determine el número de meses entre dos fechas usando Cocoa
- 6. iPhone - obtenga el número de días entre dos fechas
- 7. Java, calcular el número de días entre dos fechas
- 8. Calcular el número de días hábiles entre dos días
- 9. Contabilizar días de trabajo entre dos fechas
- 10. Número de días entre dos fechas en Joda-Time
- 11. Número de días entre dos fechas: ANSI SQL
- 12. JavaScript: Cómo calcular el número de días entre dos fechas usando javascript
- 13. Diferencia de días entre dos fechas
- 14. Días, horas, minutos, segundos entre dos fechas
- 15. ¿Cómo puedo calcular el número de años entre dos fechas?
- 16. ¿Cómo puedo comparar dos fechas, devolver un número de días
- 17. Diferencia entre dos fechas en Python
- 18. ¿Cómo obtener el número de días de diferencia entre dos fechas en mysql?
- 19. ¿Encontrar diferencia de días entre dos fechas (excluyendo días de fin de semana) en Python?
- 20. ¿Cómo obtener el número de días entre dos fechas en Java?
- 21. ¿Cómo encontrar el número de días entre dos fechas en Java o Groovy?
- 22. ¿Cómo puedo calcular el número de días entre dos fechas en Perl?
- 23. Número de viernes entre dos fechas
- 24. ¿Cómo calculo el ancho entre dos elementos?
- 25. Calcular el número de días entre dos fechas dentro de las plantillas de Django
- 26. ¿Cómo contar días entre dos fechas en PHP?
- 27. Obtener el número de días entre dos fechas de NSDate en una zona horaria particular
- 28. ¿Cómo se calcula el número de semanas entre dos fechas?
- 29. ¿Cómo puedo encontrar el número de años entre dos fechas?
- 30. Número de meses entre dos fechas
que sería mejor ser 'd1 - d0' tener un resultado positivo – Tianqing