python - tiempo - series temporales econometria
Serie de tiempo de anĂ¡lisis en Python (5)
Aquí hay una solución stdlib que admite un desplazamiento utc variable en la cadena de tiempo de entrada:
>>> from email.utils import parsedate_tz, mktime_tz
>>> from datetime import datetime, timedelta
>>> timestamp = mktime_tz(parsedate_tz(''Tue May 08 15:14:45 +0800 2012''))
>>> utc_time = datetime(1970, 1, 1) + timedelta(seconds=timestamp)
>>> utc_time
datetime.datetime(2012, 5, 8, 7, 14, 45)
Tengo una cadena de fecha y hora que no sé cómo analizarla en Python.
La cadena es así:
Tue May 08 15:14:45 +0800 2012
Lo intenté
datetime.strptime("Tue May 08 15:14:45 +0800 2012","%a %b %d %H:%M:%S %z %Y")
pero Python plantea
''z'' is a bad directive in format ''%a %b %d %H:%M:%S %z %Y''
De acuerdo con el documento de Python:
% z Desplazamiento UTC en la forma + HHMM o -HHMM (cadena vacía si el objeto es ingenuo).
¿Cuál es el formato correcto para analizar esta cadena de tiempo?
Se ha discutido muchas veces en SO. En resumen, "% z" no es compatible porque la plataforma no lo admite. Mi solución es nueva, solo omita la zona horaria .:
datetime.datetime.strptime(re.sub(r"[+-]([0-9])+", "", "Tue May 08 15:14:45 +0800 2012"),"%a %b %d %H:%M:%S %Y")
Su mejor strptime()
echar un vistazo a strptime()
Algo a lo largo de las líneas de
>>> from datetime import datetime
>>> date_str = ''Tue May 08 15:14:45 +0800 2012''
>>> date = datetime.strptime(date_str, ''%a %B %d %H:%M:%S +0800 %Y'')
>>> date
datetime.datetime(2012, 5, 8, 15, 14, 45)
No estoy seguro de cómo hacer la zona horaria +0800 desafortunadamente, tal vez alguien más pueda ayudar con eso.
Las cadenas de formato se pueden encontrar en http://docs.python.org/library/time.html#time.strftime y son las mismas para formatear la cadena para imprimir.
Espero que ayude
marca
PD, tu mejor apuesta para husos horarios en la instalación de pytz desde pypi. ( http://pytz.sourceforge.net/ ) de hecho, creo que pytz tiene un gran método de análisis de fecha y hora, si no recuerdo mal. La lib estándar es un poco delgada en el suelo con la funcionalidad de zona horaria.
datetime.datetime.strptime
tiene problemas con el análisis de zona horaria. Eche un vistazo al paquete dateutil
:
>>> from dateutil import parser
>>> parser.parse("Tue May 08 15:14:45 +0800 2012")
datetime.datetime(2012, 5, 8, 15, 14, 45, tzinfo=tzoffset(None, 28800))
In [117]: datetime.datetime.strptime?
Type: builtin_function_or_method
Base Class: <type ''builtin_function_or_method''>
String Form: <built-in method strptime of type object at 0x9a2520>
Namespace: Interactive
Docstring:
string, format -> new datetime parsed from a string (like time.strptime()).