semana obtener leer ingresar imprimir hora fecha convertir como capturar python timedelta

leer - obtener el dia de la semana en python



Python-ComparaciĆ³n de fecha y hora con marcas de tiempo, timedelta (3)

¿Qué hay de malo con este método?

>>> from datetime import datetime >>> a = datetime.now() >>> b = datetime.now() # after a few seconds >>> delta = a-b >>> delta.total_seconds() -6.655989

Tenga en cuenta que total_seconds solo está disponible en Python 2.7 <, pero según la documentación es:

Equivalente a ( td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6 computado con la división verdadera habilitada.

que da exactamente el mismo resultado.

He pasado la última hora explorando los documentos de Python y muchas preguntas de SO; por favor, perdóname por ser otro novato de Python atrapado por el misterio de la diferencia horaria en Python.

Mi objetivo es determinar la diferencia entre la hora actual y una fecha / hora determinada, independientemente de estar en el pasado / futuro y devolver un formato viable, como segundos.

Por ejemplo, si las entradas son 2:00 PM y 4:00 PM (ahora), me gustaría que dijera "-7200", que representa el evento que ocurrió hace dos horas. Si las entradas son Fri 4:00 PM (ahora) y Sun 5:00 PM, la salida debe ser de "176400" segundos, lo que representa dos días y 1 hora a partir de ahora.

Aquí están las cosas que he intentado ...

  • Mi primera versión fue una función que tomó una marca de tiempo de cadena y la dividió en múltiples variables, y luego las comparó. Estaba lleno de muchos errores y me imagino que si lo publicara aquí, sería responsable de que los programadores vomitaran.

  • Me topé con esta función de tiempo mágico y exploré los documentos y SO, pero no creo que haga lo que estoy buscando.

  • Tuve la idea de convertir ambas marcas de tiempo en segundos desde la época y luego restar, pero esto se convierte en un problema si la resta está en el orden incorrecto (casos diferentes si el evento está en el futuro), y tengo ganas de agregar afirmaciones if para verificar El signo de los segundos sería torpe y algo para evitar.

Este es mi código actual (aún debe ser corregido para una comparación ''bidireccional''), a partir de una pregunta SO resuelta previamente:

now = time.strftime("%a %b %d %H:%M:%S %Y") then = time.ctime(os.path.getmtime("x.cache")) tdelta = datetime.strptime(now, ''%a %b %d %H:%M:%S %Y'') - datetime.strptime(then, ''%a %b %d %H:%M:%S %Y'')

Y siento que debería poder de alguna manera sacar segundos de esto, como en esta pregunta: timedelta de Python: ¿no puedo obtener la unidad de tiempo en la que quiero el valor de toda la diferencia?

Pero no sé cómo conectar estos puntos.

¿Cómo puedo lograr esto?


Deberías poder usar

tdelta.total_seconds()

para obtener el valor que busca. Esto se debe a que tdelta es un objeto timedelta , al igual que cualquier diferencia entre los objetos de datetime .

Un par de notas:

  1. El uso de strftime seguido de strptime es superfluo. Debería poder obtener el datetime actual con datetime.now .
  2. De manera similar, usar time.ctime seguido de strptime es más trabajo del necesario. Debería poder obtener el otro objeto datetime.fromtimestamp con datetime.fromtimestamp .

Entonces, tu código final podría ser

now = datetime.now() then = datetime.fromtimestamp(os.path.getmtime("x.cache")) tdelta = now - then seconds = tdelta.total_seconds()


Tuve el mismo problema hace un par de meses. Lo que está buscando es datetime.timedelta y datetime.datetime.fromtimestamp (). Aquí hay un ejemplo de cómo usarlos para solucionar su problema.

import datetime import time t1 = time.time() #do something to kill time or get t2 from somewhere a = [i for i in range(1000)] t2 = time.time() #get the difference as datetime.timedelta object diff=(datetime.datetime.fromtimestamp(t1) - datetime.datetime.fromtimestamp(t2)) #diff is negative as t2 is in the future compared to t2 print(''difference is {0} seconds''.format(abs(diff.total_seconds())))