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
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/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()
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.
t == time(23,59)
entonces este enfoque no funcionará. Cuando se agrega 1
a t.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)
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.