¿Cuál es la manera más clara y más Pythonic de obtener la fecha de mañana? Tiene que haber una manera mejor que añadir una al día, manejar los días al final del mes, etc.¿La manera más limpia y más Pythonic de obtener la fecha de mañana?
Respuesta
datetime.date.today() + datetime.timedelta(days=1)
debe hacer el truco
timedelta
puede manejar la adición de días, segundos, microsegundos, milisegundos, minutos, horas o semanas.
>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2009, 10, 1)
>>> today + datetime.timedelta(days=1)
datetime.date(2009, 10, 2)
>>> datetime.date(2009,10,31) + datetime.timedelta(hours=24)
datetime.date(2009, 11, 1)
Como se le preguntó en un comentario, saltar días no suponen ningún problema:
>>> datetime.date(2004, 2, 28) + datetime.timedelta(days=1)
datetime.date(2004, 2, 29)
>>> datetime.date(2004, 2, 28) + datetime.timedelta(days=2)
datetime.date(2004, 3, 1)
>>> datetime.date(2005, 2, 28) + datetime.timedelta(days=1)
datetime.date(2005, 3, 1)
Sin manipulación de leap seconds Tho:
>>> from datetime import datetime, timedelta
>>> dt = datetime(2008,12,31,23,59,59)
>>> str(dt)
'2008-12-31 23:59:59'
>>> # leap second was added at the end of 2008,
>>> # adding one second should create a datetime
>>> # of '2008-12-31 23:59:60'
>>> str(dt+timedelta(0,1))
'2009-01-01 00:00:00'
>>> str(dt+timedelta(0,2))
'2009-01-01 00:00:01'
maldito.
EDITAR - @ Marcos: Los documentos dicen "sí", pero el código dice "no tanto":
>>> time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S")
(2008, 12, 31, 23, 59, 60, 2, 366, -1)
>>> time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S"))
1230789600.0
>>> time.gmtime(time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S")))
(2009, 1, 1, 6, 0, 0, 3, 1, 0)
>>> time.localtime(time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S")))
(2009, 1, 1, 0, 0, 0, 3, 1, 0)
Me gustaría pensar que gmtime o localtime tomarían el valor devuelto por mktime y me ha dado respalda la tupla original, con 60 como la cantidad de segundos. Y esta prueba muestra que estos segundos intercalares simplemente pueden desaparecer ...
>>> a = time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S"))
>>> b = time.mktime(time.strptime("2009-01-01 00:00:00","%Y-%m-%d %H:%M:%S"))
>>> a,b
(1230789600.0, 1230789600.0)
>>> b-a
0.0
'time.strftime' maneja segundos intercalares: vea la Nota 2: http://docs.python.org/library/time.html#time.strftime y Note 3: http://docs.python.org/library/datetime .html # strftime-behavior –
Esto se debe a que el tiempo de Unix no maneja los segundos intercalares. Ver http://en.wikipedia.org/wiki/Unix_time#History, http://www.mail-archive.com/[email protected]/msg00094.html, y POSIX en sí. –
"todos los días se contabilizarán exactamente 86400 segundos" http://www.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_15 –
Incluso el módulo básico time
puede manejar esto:
import time
time.localtime(time.time() + 24*3600)
La solución más elegante de todas – Greg
Esto falla en los límites del horario de verano en los Estados Unidos, porque en esos límites un día tendrá 23 horas y un día tendrá 25 horas. Esto tampoco toma varios segundos en cuenta. –
@CharlesWood: esta respuesta puede devolver una hora diferente que (en algunas zonas horarias) significa que puede devolver una ** fecha diferente ** (no mañana) pero siempre devuelve el tiempo exactamente 24 horas antes (la respuesta aceptada regresa a la medianoche (horas desconocidas a partir de ahora)). No veo cómo los segundos intercalares pueden cambiar el resultado aquí a menos que se los llame durante un segundo intercalar en sistemas en los que 23:59:60 y 00:00:00 tienen la misma marca de tiempo. – jfs
- 1. más corta y la mejor manera de ejemplo, "Fecha"/limpia una clase
- 2. Manera más limpia de invocar sucesos cruzados
- 3. manera más Pythonic para concatenar cadenas
- 4. ¿La manera más limpia de buscar una matriz 2D?
- 5. ¿Cuál es la manera más elegante de obtener el final del día (fecha y hora)?
- 6. Manera más limpia de encontrar una coincidencia en una lista
- 7. Manera más limpia de modelar Encabezado Aceptado en .NET MVC
- 8. Más Pythonic conversión a binario?
- 9. PHP: ¿La forma más limpia de modificar una matriz multidimensional?
- 10. MSBUILD/csc: Manera más limpia de x64 mscorlib warning 1607
- 11. Manera más limpia de escribir element.parent(). Parent(). Parent(). Parent(). Parent()
- 12. Obtener la fecha más reciente de una serie de fechas
- 13. Cómo encontrar la fecha más alta (más reciente) y la más baja (anterior) [R]
- 14. Obtenga la hora de mañana xx: xx
- 15. ¿Cuál es la manera de Rails de definir la fecha de mañana?
- 16. Analizando una cadena en C#; ¿hay una manera más limpia?
- 17. ¿Cuál es la forma más limpia de obtener una suma de comprobación de una matriz multidimensional?
- 18. La manera Pythonic de organizar módulos y paquetes
- 19. ¿La manera más eficiente de obtener varios hashes en Redis?
- 20. Cuál es más pythonic - composición de la función, lambdas, o algo más?
- 21. Manera más limpia de eliminar elementos comunes de la lista en varias listas en python
- 22. manera más Pythonic (y eficiente) de anidar una lista de pares
- 23. Forma más rápida/más limpia de cargar un archivo de texto en la memoria
- 24. Manera correcta de dar formato a la fecha con cadenas como hoy, ayer, mañana, etc.
- 25. ¿La forma más simple de incrementar una fecha en PHP?
- 26. La manera más pitónica de obtener el elemento anterior
- 27. Obtenga la fecha de mañana con getDay Javascript
- 28. Manera más limpia en Gradle para obtener la ruta a un archivo jar en el caché de dependencia de gradle
- 29. ¿La manera más eficiente de crear miniaturas?
- 30. Obtener la fecha más reciente en registros XML
Maneja bien los años bisiestos? – Rook
@ldigas: sí lo hace. – nosklo