Estoy tratando de hacer algo como esto:
time() + timedelta(hours=1)
sin embargo, Python no lo permite , aparentemente por una buena razón.
¿Alguien tiene una solución sencilla?
Estoy tratando de hacer algo como esto:
time() + timedelta(hours=1)
sin embargo, Python no lo permite , aparentemente por una buena razón.
¿Alguien tiene una solución sencilla?
Respuestas:
La solución está en el enlace que proporcionó en su pregunta:
datetime.combine(date.today(), time()) + timedelta(hours=1)
Ejemplo completo:
from datetime import date, datetime, time, timedelta
dt = datetime.combine(date.today(), time(23, 55)) + timedelta(minutes=30)
print dt.time()
Salida:
00:25:00
date.today()se utiliza para admitir timedeltas tanto positivos como negativos. date.minfuncionaría para timedeltas positivos.
datetime.MAXYEARque siga siendo 9999 en 9999.
Si vale la pena agregar otro archivo / dependencia a su proyecto, acabo de escribir una pequeña clase que se extiende datetime.timecon la capacidad de hacer aritmética. Si pasa de la medianoche, simplemente termina:
>>> from nptime import nptime
>>> from datetime import timedelta
>>> afternoon = nptime(12, 24) + timedelta(days=1, minutes=36)
>>> afternoon
nptime(13, 0)
>>> str(afternoon)
'13:00:00'
Está disponible en PyPi como nptime ("tiempo no pedante") o en GitHub: https://github.com/tgs/nptime
La documentación está en http://tgs.github.io/nptime/
Esto es un poco desagradable, pero:
from datetime import datetime, timedelta
now = datetime.now().time()
# Just use January the first, 2000
d1 = datetime(2000, 1, 1, now.hour, now.minute, now.second)
d2 = d1 + timedelta(hours=1, minutes=23)
print d2.time()
datetimemódulo. De lo contrario, sería necesario tratar los errores de desbordamiento y demás manualmente.
Solución alterna:
t = time()
t2 = time(t.hour+1, t.minute, t.second, t.microsecond)
También puede omitir los microsegundos, si no necesita tanta precisión.
t == time(23,59)entonces este enfoque no funcionará. Cuando se agrega 1a t.hourque obtendráValueError: hour must be in 0..23
datetime.timedelta(days=1)para agregar un día a un objeto de fecha y hora. Evitarás la tierra de depuración.
today()es el día antes de cambiar al horario de verano y el timedelta se extiende a la zona horaria diferente? ¿Este código se ve afectado por las configuraciones regionales?