¿Cómo convertir una cadena en formato "%d/%m/%Y"
a marca de tiempo?
"01/12/2011" -> 1322697600
¿Cómo convertir una cadena en formato "%d/%m/%Y"
a marca de tiempo?
"01/12/2011" -> 1322697600
>>> import time
>>> import datetime
>>> s = "01/12/2011"
>>> time.mktime(datetime.datetime.strptime(s, "%d/%m/%Y").timetuple())
1322697600.0
calendar.timegm()
o.toordinal()
datetime.datetime.strptime(s, "%d/%m/%Y").timestamp()
es un poco más corto
.timestamp()
asume la hora local en lugar de UTC si no se proporciona una zona horaria explícita. El código en la respuesta funciona (produce esperado 1322697600
) solo en una computadora donde la zona horaria local tiene cero compensación de utc.
Yo uso ciso8601
, que es 62 veces más rápido que el strptime de datetime.
t = "01/12/2011"
ts = ciso8601.parse_datetime(t)
# to get time in seconds:
time.mktime(ts.timetuple())
Puedes aprender más aquí .
Para convertir la cadena en un objeto de fecha:
from datetime import date, datetime
date_string = "01/12/2011"
date_object = date(*map(int, reversed(date_string.split("/"))))
assert date_object == datetime.strptime(date_string, "%d/%m/%Y").date()
La forma de convertir el objeto de fecha en la marca de tiempo POSIX depende de la zona horaria. De convertir datetime.date
a marca de tiempo UTC en Python :
el objeto de fecha representa la medianoche en UTC
import calendar
timestamp1 = calendar.timegm(utc_date.timetuple())
timestamp2 = (utc_date.toordinal() - date(1970, 1, 1).toordinal()) * 24*60*60
assert timestamp1 == timestamp2
el objeto de fecha representa la medianoche en hora local
import time
timestamp3 = time.mktime(local_date.timetuple())
assert timestamp3 != timestamp1 or (time.gmtime() == time.localtime())
Las marcas de tiempo son diferentes a menos que la medianoche en UTC y en la hora local sea la misma instancia de hora.
NameError: name 'wckCalendar' is not defined
. Estoy ejecutando Python 3.4.1 en una máquina con Windows de 32 bits. ¿Alguna idea? Gracias.
>>> int(datetime.datetime.strptime('01/12/2011', '%d/%m/%Y').strftime("%s"))
1322683200
La respuesta también depende de la zona horaria de la fecha de entrada. Si su fecha es una fecha local, entonces puede usar mktime () como dijo katrielalex, solo que no veo por qué usó datetime en lugar de esta versión más corta:
>>> time.mktime(time.strptime('01/12/2011', "%d/%m/%Y"))
1322694000.0
Pero observe que mi resultado es diferente al suyo, ya que probablemente estoy en una TZ diferente (y el resultado es la marca de tiempo UNIX sin zona horaria)
Ahora, si la fecha de entrada ya está en UTC, creo que la solución correcta es:
>>> calendar.timegm(time.strptime('01/12/2011', '%d/%m/%Y'))
1322697600
Simplemente use datetime.datetime.strptime
:
import datetime
stime = "01/12/2011"
print(datetime.datetime.strptime(stime, "%d/%m/%Y").timestamp())
Resultado:
1322697600
Para usar UTC en lugar del uso de la zona horaria local .replace
:
datetime.datetime.strptime(stime, "%d/%m/%Y").replace(tzinfo=datetime.timezone.utc).timestamp()
float
noint
Muchas de estas respuestas no se molestan en considerar que la fecha es ingenua para empezar
Para ser correcto, primero debe hacer que la fecha ingenua sea una fecha y hora consciente de la zona horaria
import datetime
import pytz
# naive datetime
d = datetime.datetime.strptime('01/12/2011', '%d/%m/%Y')
>>> datetime.datetime(2011, 12, 1, 0, 0)
# add proper timezone
pst = pytz.timezone('America/Los_Angeles')
d = pst.localize(d)
>>> datetime.datetime(2011, 12, 1, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>)
# convert to UTC timezone
utc = pytz.UTC
d = d.astimezone(utc)
>>> datetime.datetime(2011, 12, 1, 8, 0, tzinfo=<UTC>)
# epoch is the beginning of time in the UTC timestamp world
epoch = datetime.datetime(1970,1,1,0,0,0,tzinfo=pytz.UTC)
>>> datetime.datetime(1970, 1, 1, 0, 0, tzinfo=<UTC>)
# get the total second difference
ts = (d - epoch).total_seconds()
>>> 1322726400.0
También:
Tenga cuidado, utilizando pytz
para tzinfo
en un datetime.datetime
trabajo no para muchas zonas horarias. Vea datetime con la zona horaria pytz. Diferente desplazamiento dependiendo de cómo se configure tzinfo
# Don't do this:
d = datetime.datetime(2011, 12, 1,0,0,0, tzinfo=pytz.timezone('America/Los_Angeles'))
>>> datetime.datetime(2011, 1, 12, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' LMT-1 day, 16:07:00 STD>)
# tzinfo in not PST but LMT here, with a 7min offset !!!
# when converting to UTC:
d = d.astimezone(pytz.UTC)
>>> datetime.datetime(2011, 1, 12, 7, 53, tzinfo=<UTC>)
# you end up with an offset
Sugeriría dateutil :
import dateutil.parser
dateutil.parser.parse("01/12/2011", dayfirst=True).timestamp()
"%d/%m/%Y"
formato. Comparar: dateutil.parser.parse("01/02/2001")
ydatetime.strptime("01/02/2001", "%d/%m/%Y")
1322697600
menos que su zona horaria local sea UTC. Ver mi comentario de 2014
Parece ser bastante eficiente:
import datetime
day, month, year = '01/12/2011'.split('/')
datetime.datetime(int(year), int(month), int(day)).timestamp()
1.61 µs ± 120 ns por bucle (media ± desviación estándar de 7 corridas, 100000 bucles cada una)
datetime
función? datetime
de la datetime
biblioteca no es compatible.timestamp()
solo use datetime.timestamp (su fecha datetime), la instancia de datetime contiene la información de la zona horaria, por lo que la marca de tiempo será una marca de tiempo utc estándar. Si transforma la fecha y la hora en tupla de tiempo, perderá su zona horaria, por lo que el resultado será un error. si desea proporcionar una interfaz, debe escribir así: int (datetime.timestamp (time_instance)) * 1000
Puede consultar este siguiente enlace para usar la strptime
función desde datetime.datetime
, para convertir la fecha desde cualquier formato junto con la zona horaria.
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
puedes convertir a isoformat
my_date = '2020/08/08'
my_date = my_date.replace('/','-') # just to adapte to your question
date_timestamp = datetime.datetime.fromisoformat(my_date).timestamp()
Una función simple para obtener el tiempo de UNIX Epoch.
NOTA : Esta función supone que la fecha y hora de entrada está en formato UTC (consulte los comentarios aquí).
def utctimestamp(ts: str, DATETIME_FORMAT: str = "%d/%m/%Y"):
import datetime, calendar
ts = datetime.datetime.utcnow() if ts is None else datetime.datetime.strptime(ts, DATETIME_FORMAT)
return calendar.timegm(ts.utctimetuple())
Uso :
>>> utctimestamp("01/12/2011")
1322697600
>>> utctimestamp("2011-12-01", "%Y-%m-%d")
1322697600