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?
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
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?date.today()
se utiliza para admitir timedeltas tanto positivos como negativos.date.min
funcionaría para timedeltas positivos.datetime.MAXYEAR
que 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.time
con 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/nptimeLa documentación está en http://tgs.github.io/nptime/
fuente
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()
fuente
datetime
mó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.
fuente
t == time(23,59)
entonces este enfoque no funcionará. Cuando se agrega1
at.hour
que 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.Puede cambiar la hora () a ahora () para que funcione
from datetime import datetime, timedelta datetime.now() + timedelta(hours=1)
fuente