str parse hora from convertir cast python python-2.7 time iso8601 rfc3339

hora - python parse date



Conversión de la hora ISO 8601 en segundos en Python (3)

Estoy tratando de sumar dos veces juntos. La marca de tiempo ISO 8601 es ''1984-06-02T19: 05: 00.000Z'', y me gustaría convertirla en segundos. Intenté usar el módulo Python iso8601 , pero es solo un analizador.

¿Alguna sugerencia?


Aquí hay una solución en Python 3:

$ date +%s 1428030452 $ TZ=US/Pacific date -d @1428030452 ''+%Y%m%d %H:%M:%S %z'' 20150402 20:07:32 -0700 $ TZ=US/Eastern date -d @1428030452 ''+%Y%m%d %H:%M:%S %z'' 20150402 23:07:32 -0400 $ python3 >>> from datetime import datetime,timezone >>> def iso2epoch(ts): ... return int(datetime.strptime(ts[:-6],"%Y%m%d %H:%M:%S").replace(tzinfo=timezone.utc).timestamp()) - (int(ts[-2:])*60 + 60 * 60 * int(ts[-4:-2]) * int(ts[-5:-4]+''1'')) ... >>> iso2epoch("20150402 20:07:32 -0700") 1428030452 >>> iso2epoch("20150402 23:07:32 -0400") 1428030452 >>>


Si desea obtener los segundos desde la época, puede usar python-dateutil para convertirlo en un objeto de datetime y datetime y luego convertirlo en segundos usando el método strftime . Al igual que:

>>> import dateutil.parser as dp >>> t = ''1984-06-02T19:05:00.000Z'' >>> parsed_t = dp.parse(t) >>> t_in_seconds = parsed_t.strftime(''%s'') >>> t_in_seconds ''455047500''

Así que estabas a mitad de camino :)


Su fecha es la hora UTC en formato RFC 3339 , puede analizarla usando solo stdlib:

from datetime import datetime utc_dt = datetime.strptime(''1984-06-02T19:05:00.000Z'', ''%Y-%m-%dT%H:%M:%S.%fZ'') # Convert UTC datetime to seconds since the Epoch timestamp = (utc_dt - datetime(1970, 1, 1)).total_seconds() # -> 455051100.0

Consulte también Convertir datetime.date a la marca de hora UTC en Python

¿Cómo lo convierto de nuevo al formato ISO 8601?

Para volver a convertir la marca de hora POSIX, cree un objeto UTC datetime y formatee usando el método .strftime() :

from datetime import datetime, timedelta utc_dt = datetime(1970, 1, 1) + timedelta(seconds=timestamp) print(utc_dt.strftime(''%Y-%m-%dT%H:%M:%S.%fZ'')) # -> 1984-06-02T19:05:00.000000Z

Nota: Imprime seis dígitos después del punto decimal (microsegundos). Para obtener tres dígitos, consulte Formateo de microsegundos con 2 decimales (de hecho, la conversión de microsegundos en decenas de microsegundos) .