yyyy from create python datetime

from - Python mide la edad



python datetime to timestamp (6)

Estoy tratando de convertir una cadena de fecha en una edad.

La cadena es como: "Lunes, 17 de noviembre de 2008 01:45:32 +0200" y necesito calcular cuántos días hace.

He convertido la fecha exitosamente usando:

>>> time.strptime("Mon, 17 Nov 2008 01:45:32 +0200","%a, %d %b %Y %H:%M:%S +0200") (2008, 11, 17, 1, 45, 32, 0, 322, -1)

Por alguna razón,% z me da un error para el +0200 pero no importa mucho.

Puedo obtener la hora actual usando:

>>> time.localtime() (2009, 2, 3, 19, 55, 32, 1, 34, 0)

pero ¿cómo puedo restar uno de otro sin pasar por cada elemento de la lista y hacerlo manualmente?


En Python, los objetos datetime soportan la resta de forma nativa:

from datetime import datetime age = datetime.now() - datetime.strptime(...) print age.days

El resultado es un objeto timedelta .


Gracias chicos, terminé con lo siguiente:

def getAge( d ): """ Calculate age from date """ delta = datetime.now() - datetime.strptime(d, "%a, %d %b %Y %H:%M:%S +0200") return delta.days + delta.seconds / 86400.0 # divide secs into days

Dando:

>>> getAge("Mon, 17 Nov 2008 01:45:32 +0200") 78.801319444444445


from datetime import datetime, timedelta datetime.now() datetime.datetime(2009, 2, 3, 15, 17, 35, 156000) datetime.now() - datetime(1984, 6, 29 ) datetime.timedelta(8985, 55091, 206000) datetime.now() - datetime(1984, 6, 29 ) datetime.timedelta(8985, 55094, 198000) # my age...

timedelta (días [, segundos [, microsegundos [, milisegundos [, minutos [, horas [, semanas]]]]]]])


Necesita utilizar el módulo datetime y el objeto datetime.timedelta

from datetime import datetime t1 = datetime.strptime("Mon, 17 Nov 2008 01:45:32 +0200","%a, %d %b %Y %H:%M:%S +0200") t2 = datetime.now() tdelta = t2 - t1 # actually a datetime.timedelta object print tdelta.days


Si no quiere usar datetime (por ejemplo, si su Python es antiguo y no tiene el módulo), puede usar el módulo de tiempo.

s = "Mon, 17 Nov 2008 01:45:32 +0200" import time import email.utils # Using email.utils means we can handle the timezone. t = email.utils.parsedate_tz(s) # Gets the time.mktime 9-tuple, plus tz d = time.time() - time.mktime(t[:9]) + t[9] # Gives the difference in seconds.


Desde Python 3.2, datetime.strptime() devuelve un objeto datetime consciente si se proporciona la directiva %z :

#!/usr/bin/env python3 from datetime import datetime, timezone, timedelta s = "Mon, 17 Nov 2008 01:45:32 +0200" birthday = datetime.strptime(s, ''%a, %d %b %Y %H:%M:%S %z'') age = (datetime.now(timezone.utc) - birthday) / timedelta(1) # age in days print("%.0f" % age)

En las versiones anteriores de Python , se podía usar la versión correcta de la respuesta de @Tony Meyer :

#!/usr/bin/env python import time from email.utils import parsedate_tz, mktime_tz s = "Mon, 17 Nov 2008 01:45:32 +0200" ts = mktime_tz(parsedate_tz(s)) # seconds since Epoch age = (time.time() - ts) / 86400 # age in days print("%.0f" % age)

Ambos ejemplos de código producen el mismo resultado.