long python datetime unix-timestamp strftime

long - string to datetime python



Convertir la cadena de fecha y hora de Unix en una fecha legible (15)

¿Miraste el paquete datetime? Creo que tiene un método fromUnixTimestamp.

Tengo una cadena que representa una marca de tiempo de Unix (es decir, "1284101485") en Python, y me gustaría convertirla en una fecha legible. Cuando uso time.strftime , obtengo un TypeError :

>>>import time >>>print time.strftime("%B %d %Y", "1284101485") Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: argument must be 9-item sequence, not str


Además de usar el paquete time / datetime , los pandas también se pueden usar para resolver el mismo problema. A continuación se muestra cómo podemos usar pandas para convertir la marca de tiempo en una fecha legible :

Las marcas de tiempo pueden estar en dos formatos:

  1. 13 dígitos (milisegundos): para convertir milisegundos a la fecha, use:

    import pandas result_ms=pandas.to_datetime(''1493530261000'',unit=''ms'') str(result_ms) Output: ''2017-04-30 05:31:01''

  2. 10 dígitos (segundos): para convertir segundos a la fecha, use:

    import pandas result_s=pandas.to_datetime(''1493530261'',unit=''s'') str(result_s) Output: ''2017-04-30 05:31:01''


Existe una forma interesante de no tener que preocuparse por las zonas horarias, utc, etc. Simplemente convierta la cadena al formato de fecha de Excel, y luego a una fecha / hora legible:

import datetime def xldate_to_datetime(xldate): temp = datetime.datetime(1899, 12, 30) delta = datetime.timedelta(days=xldate) return temp+delta ts = "1284101485" tsxl = ((int(ts)/60)/60)/24 + 25569 readabledate = xldate_to_datetime(tsxl) print(readabledate)


Hay dos partes:

  1. Convierta la marca de tiempo de Unix ("segundos desde la época") a la hora local
  2. Muestra la hora local en el formato deseado.

Una forma portátil de obtener la hora local que funciona incluso si la zona horaria local tenía un desplazamiento utc diferente en el pasado y python no tiene acceso a la base de datos tz es usar una pytz horaria pytz :

#!/usr/bin/env python from datetime import datetime import tzlocal # $ pip install tzlocal unix_timestamp = float("1284101485") local_timezone = tzlocal.get_localzone() # get pytz timezone local_time = datetime.fromtimestamp(unix_timestamp, local_timezone)

Para mostrarlo, puede usar cualquier formato de hora que sea compatible con su sistema, por ejemplo:

print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)")) print(local_time.strftime("%B %d %Y")) # print date in your format

Si no necesita una hora local, para obtener una hora UTC legible:

utc_time = datetime.utcfromtimestamp(unix_timestamp) print(utc_time.strftime("%Y-%m-%d %H:%M:%S.%f+00:00 (UTC)"))

Si no te preocupan los problemas de la zona horaria que pueden afectar la fecha en que se devuelve o si Python tiene acceso a la base de datos tz en tu sistema:

local_time = datetime.fromtimestamp(unix_timestamp) print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))

En Python 3, podría obtener una fecha y hora que tenga en cuenta la zona horaria utilizando solo stdlib (el desplazamiento UTC puede ser incorrecto si python no tiene acceso a la base de datos tz en su sistema, por ejemplo, en Windows):

#!/usr/bin/env python3 from datetime import datetime, timezone utc_time = datetime.fromtimestamp(unix_timestamp, timezone.utc) local_time = utc_time.astimezone() print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))

Las funciones del módulo de time son envolturas finas alrededor de la API de C correspondiente y, por lo tanto, pueden ser menos portátiles que los métodos de datetime y datetime correspondientes, de lo contrario, también podría usarlas:

#!/usr/bin/env python import time unix_timestamp = int("1284101485") utc_time = time.gmtime(unix_timestamp) local_time = time.localtime(unix_timestamp) print(time.strftime("%Y-%m-%d %H:%M:%S", local_time)) print(time.strftime("%Y-%m-%d %H:%M:%S+00:00 (UTC)", utc_time))


La respuesta más votada sugiere usar fromtimestamp, que es propenso a errores, ya que usa la zona horaria local. Para evitar problemas, un mejor enfoque es utilizar UTC:

datetime.datetime.utcfromtimestamp(posix_time).strftime(''%Y-%m-%dT%H:%M:%SZ'')

Donde posix_time es el tiempo de la época de Posix que quieres convertir


Para una marca de tiempo legible por humanos de una marca de tiempo UNIX, he usado esto en scripts antes:

import os, datetime datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")

Salida:

''26 de diciembre de 2012''


Puedes convertir la hora actual de esta manera.

t=datetime.fromtimestamp(time.time()) t.strftime(''%Y-%m-%d'') ''2012-03-07''

Para convertir una fecha en cadena a diferentes formatos.

import datetime,time def createDateObject(str_date,strFormat="%Y-%m-%d"): timeStamp = time.mktime(time.strptime(str_date,strFormat)) return datetime.datetime.fromtimestamp(timeStamp) def FormatDate(objectDate,strFormat="%Y-%m-%d"): return objectDate.strftime(strFormat) Usage ===== o=createDateObject(''2013-03-03'') print FormatDate(o,''%d-%m-%Y'') Output 03-03-2013


Puedes usar easy_date para hacerlo más fácil:

import date_converter my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")


Un trazador de líneas rápido y sucio:

''-''.join(str(x) for x in list(tuple(datetime.datetime.now().timetuple())[:6]))

''2013-5-5-1-9-43''


Utilice el módulo de datetime :

from datetime import datetime ts = int("1284101485") # if you encounter a "year is out of range" error the timestamp # may be in milliseconds, try `ts /= 1000` in that case print(datetime.utcfromtimestamp(ts).strftime(''%Y-%m-%d %H:%M:%S''))


acabo de utilizar con éxito:

>>> type(tstamp) pandas.tslib.Timestamp >>> newDt = tstamp.date() >>> type(newDt) datetime.date


timestamp ="124542124" value = datetime.datetime.fromtimestamp(timestamp) exct_time = value.strftime(''%d %B %Y %H:%M:%S'')

Obtenga la fecha legible de la marca de tiempo con la hora también, también puede cambiar el formato de la fecha.


>>> from datetime import datetime >>> datetime.fromtimestamp(1172969203.1) datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)

Tomado de http://seehuhn.de/pages/pdate


>>> import time >>> time.ctime(int("1284101485")) ''Fri Sep 10 16:51:25 2010'' >>> time.strftime("%D %H:%M", time.localtime(int("1284101485"))) ''09/10/10 16:51''


import datetime temp = datetime.datetime.fromtimestamp(1386181800).strftime(''%Y-%m-%d %H:%M:%S'') print temp