tenga en cuenta que las respuestas más votadas son para la fecha y hora sin horario, mientras que vemos que en el entorno de producción cada vez más servicios en todo el mundo están conectados entre sí y la fecha y hora consciente de la zona horaria se convierte en el estándar requerido
Sería bueno si esta respuesta cubriera zonas horarias (tal vez UTC como ejemplo) y tal vez comience con time.time ().
Greg Lindahl
44
@Toskan el formato no era parte de la pregunta, por lo que no debería ser parte de la respuesta. Ya hay un enlace proporcionado a más documentación del módulo que contiene cosas como el formateo.
JiyuuSensei
¿En qué versión de Python se dio la respuesta original? Solo escribir datetime.datetime.now()en mi consola interactiva Python 2.7 (IronPython aún no se ha actualizado) me da el mismo comportamiento que el ejemplo más reciente que se usa print()en la respuesta. No he replicado con éxito lo que muestra la respuesta original (datetime.datetime (2009, 1, 6, 15, 8, 24, 78915)). (No es que realmente quiera, se prefiere el comportamiento print (), pero tengo curiosidad.)
RTHarston
@BobVicktor: Python 2.7, 3.7 y 3.8 me dan el mismo comportamiento, no estoy seguro de lo que estás viendo.
Harley Holcombe
@HarleyHolcombe Hmm ... ¿tal vez es algo de IronPython? Cuando datetime.now()print(datetime.now())
Todo lo que pide es obtener la hora actual, no mostrarla.
pppery
@ppperry, luego simplemente asigne una variable a la respuesta de Ray, como: myTime = str (datetime.now ()) .
Lukas
2
Irrelevante; el paso "str" no está dentro del alcance de la pregunta
pppery
44
@pppery Tampoco la operación dice que no se trata de obtener una cadena de tiempo. La operación no dice en absoluto lo que quieren hacer con el tiempo, entonces, ¿por qué es malo mostrar cómo convertirlo en una cadena? La mayoría de las respuestas hablan de obtener una cadena de la época, por lo que parece ser un caso de uso común, entonces, ¿por qué elegir la respuesta de Ray? ¿De qué sirve simplemente obtener el tiempo sin saber cómo hacer nada con él? Puede imprimirlo o hacer cálculos matemáticos en él, y solo un par de respuestas muestran cómo hacerlo, por lo que creo que imprimir / obtener una cadena es un uso común. ;-) (Sé que es por lo que vine.)
RTHarston
1
El hecho de que esta respuesta tenga más de 440 votos a favor sugiere que la adición menor del método de cadena fue útil para mucha gente.
John
360
¿Cómo obtengo la hora actual en Python?
El timemódulo
El timemódulo proporciona funciones que nos dicen el tiempo en "segundos desde la época", así como otras utilidades.
import time
Unix Epoch Time
Este es el formato en el que debe obtener marcas de tiempo para guardar en bases de datos. Es un número de coma flotante simple que se puede convertir en un entero. También es bueno para la aritmética en segundos, ya que representa el número de segundos desde el 1 de enero de 1970 a las 00:00:00, y es luz de memoria en relación con las otras representaciones de tiempo que veremos a continuación:
>>> time.time()1424233311.771502
Esta marca de tiempo no tiene en cuenta los segundos bisiestos, por lo que no es lineal; los segundos bisiestos se ignoran. Entonces, si bien no es equivalente al estándar internacional UTC, está cerca y, por lo tanto, es bastante bueno para la mayoría de los casos de mantenimiento de registros.
Sin embargo, esto no es ideal para la programación humana. Si tiene un evento futuro que desea que tenga lugar en un momento determinado, querrá almacenar ese tiempo con una cadena que se pueda analizar en un objeto de fecha y hora o en un objeto de fecha y hora serializado (se describirá más adelante).
time.ctime
También puede representar la hora actual de la manera preferida por su sistema operativo (lo que significa que puede cambiar cuando cambia las preferencias de su sistema, así que no confíe en que esto sea estándar en todos los sistemas, como he visto que otros esperan) . Por lo general, esto es fácil de usar, pero no suele generar cadenas que se puedan ordenar cronológicamente:
>>> time.ctime()'Tue Feb 17 23:21:56 2015'
También puede hidratar marcas de tiempo en forma legible para humanos con ctime:
>>> time.ctime(1424233311.771502)'Tue Feb 17 23:21:51 2015'
Esta conversión tampoco es buena para el mantenimiento de registros (excepto en el texto que solo será analizado por humanos, y con el reconocimiento óptico de caracteres mejorado y la inteligencia artificial, creo que el número de estos casos disminuirá).
datetime módulo
El datetimemódulo también es bastante útil aquí:
>>>import datetime
datetime.datetime.now
El datetime.nowes un método de clase que devuelve la hora actual. Utiliza la información time.localtimesin la zona horaria (si no se proporciona, de lo contrario, consulte la zona horaria a continuación). Tiene una representación (que le permitiría recrear un objeto equivalente) reflejada en el shell, pero cuando se imprime (o coacciona a str), está en formato legible por humanos (y casi ISO), y el tipo lexicográfico es equivalente al tipo cronológico:
UTC es un estándar de tiempo que es casi equivalente a la zona horaria GMT. (Si bien GMT y UTC no cambian para el horario de verano, sus usuarios pueden cambiar a otras zonas horarias, como el horario de verano británico, durante el verano).
datetime zona horaria consciente
Sin embargo, ninguno de los objetos de fecha y hora que hemos creado hasta ahora se puede convertir fácilmente a varias zonas horarias. Podemos resolver ese problema con el pytzmódulo:
>>>import pytz
>>> then = datetime.datetime.now(pytz.utc)>>> then
datetime.datetime(2015,2,18,4,55,58,753949, tzinfo=<UTC>)
De manera equivalente, en Python 3 tenemos la timezoneclase con una timezoneinstancia de utc adjunta, que también hace que la zona horaria del objeto sea consciente (pero para convertir a otra zona horaria sin el práctico pytzmódulo se deja como ejercicio para el lector):
También puede hacer que un objeto datetime ingenuo sea consciente con el método de pytzzona horaria localize, o reemplazando el atributo tzinfo (con replace, esto se hace a ciegas), pero estos son más últimos recursos que mejores prácticas:
El pytzmódulo nos permite hacer que nuestros datetimeobjetos conozcan la zona horaria y convertir las horas a los cientos de zonas horarias disponibles en el pytzmódulo.
Una ostensiblemente podría serializar este objeto para la hora UTC y la tienda que en una base de datos, pero requeriría mucho más memoria y ser más propensos a errores que simplemente almacenar la hora Epoch Unix, que demostró por primera vez.
Las otras formas de ver los tiempos son mucho más propensas a errores, especialmente cuando se trata de datos que pueden provenir de diferentes zonas horarias. Desea que no haya confusión sobre a qué zona horaria se destina una cadena o un objeto de fecha y hora serializado.
Si está mostrando la hora con Python para el usuario, ctimefunciona bien, no en una tabla (normalmente no se ordena bien), sino quizás en un reloj. Sin embargo, personalmente recomiendo, cuando se trata de tiempo en Python, ya sea usando tiempo Unix o un datetimeobjeto UTC con reconocimiento de zona horaria .
¿Por qué no preguntar al Observatorio Naval de los Estados Unidos, el cronometrador oficial de la Marina de los Estados Unidos?
import requests
from lxml import html
page = requests.get('http://tycho.usno.navy.mil/cgi-bin/timer.pl')
tree = html.fromstring(page.content)print(tree.xpath('//html//body//h3//pre/text()')[1])
Si vives en el área de DC (como yo), la latencia podría no ser tan mala ...
@ C8H10N4O2 Si bien tiene razón en que las otras respuestas suponen que su computadora ya sabe la hora correcta, esta respuesta asume que la computadora tiene una conexión a Internet, que usted está en los EE. UU. Y que nunca eliminarán ese archivo / alterar el enlace. Mucho más suposiciones en esta respuesta de lo aceptado. Todavía inteligente, sin embargo
sudobangbang
34
Usando pandas para obtener la hora actual, exagerando el problema en cuestión:
import pandas as pd
print(pd.datetime.now())print(pd.datetime.now().date())print(pd.datetime.now().year)print(pd.datetime.now().month)print(pd.datetime.now().day)print(pd.datetime.now().hour)print(pd.datetime.now().minute)print(pd.datetime.now().second)print(pd.datetime.now().microsecond)
>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")01/09/201513:11
Además, esta tabla es una referencia necesaria para elegir los códigos de formato apropiados para obtener el formato de la fecha tal como lo desea (de la documentación de Python "datetime" aquí ).
strftime(time_format)devuelve la hora local actual como una cadena que corresponde a la dada time_format. Nota: time.strftime()y datetime.strftime()admite diferentes conjuntos de directivas, por ejemplo, %zno es compatible time.strftime()con Python 2 .
jfs
1
¿Es una mejor práctica usar datetime en lugar de time?
Kristen G.
2
Muchas timefunciones del módulo son envoltorios delgados alrededor de las funciones correspondientes de C. datetimees un nivel superior y generalmente es más portátil.
jfs
25
si ya está usando numpy, entonces directamente puede usar la función numpy.datetime64 ().
import numpy as np
str(np.datetime64('now'))
por solo fecha:
str(np.datetime64('today'))
o, si ya está usando pandas, puede usar la función pandas.to_datetime ()
datetime.now()devuelve la hora actual como un objeto de fecha y hora ingenuo que representa la hora en la zona horaria local. Ese valor puede ser ambiguo, por ejemplo, durante las transiciones DST ("retroceso"). Para evitar ambigüedades, se debe usar la zona horaria UTC:
from datetime import datetime
utc_time = datetime.utcnow()print(utc_time)# -> 2014-12-22 22:48:59.916417
O un objeto compatible con la zona horaria que tiene la información correspondiente de la zona horaria adjunta (Python 3.2+):
from datetime import datetime, timezone
now = datetime.now(timezone.utc).astimezone()print(now)# -> 2014-12-23 01:49:25.837541+03:00
import datetime
date_time = datetime.datetime.now()
date = date_time.date()# Gives the date
time = date_time.time()# Gives the timeprint date.year, date.month, date.day
print time.hour, time.minute, time.second, time.microsecond
Do dir(date)o cualquier variable, incluido el paquete. Puede obtener todos los atributos y métodos asociados con la variable.
Creo que quieres decir "datetime.now (). Strftime (...)"
hlin117
Sí, se puede hacer como dijiste. "datetime.datetime.now (). strftime ("% H:% M:% S:% MS ")"
usuario2030113
3
¡% MS no te da milisegundos!
ZF007
16
Por defecto, la now()función devuelve la salida en el YYYY-MM-DD HH:MM:SS:MSformato. Use el script de muestra a continuación para obtener la fecha y hora actuales en un script de Python e imprimir los resultados en la pantalla. Cree un archivo getDateTime1.pycon el contenido a continuación.
Esta pregunta no necesita una nueva respuesta solo por el hecho de que ... un nuevo juguete / módulo brillante, sin embargo, es suficiente justificación. Esa es la biblioteca de Péndulo , que parece hacer el tipo de cosas que intentaba la flecha, excepto sin los defectos y errores inherentes que acosan a la flecha.
Hay muchos estándares que deben abordarse, incluidos múltiples RFC e ISO, de los que preocuparse. Alguna vez los mezcló; no se preocupe, eche un vistazo adir(pendulum.constants) embargo, Hay un poco más que los formatos RFC e ISO allí.
Cuando decimos local, ¿a qué nos referimos? Bueno, quiero decir:
Presumiblemente, la mayoría del resto de ustedes quiere decir en otro lugar.
Y así sigue. Larga historia corta: Pendulum intenta hacer por fecha y hora lo que hicieron las solicitudes de HTTP. Vale la pena considerarlo, especialmente por su facilidad de uso y su extensa documentación.
Quiero pasar el tiempo con milisegundos. Una forma simple de obtenerlos:
import time, datetime
print(datetime.datetime.now().time())# 11:20:08.272239# Or in a more complicated wayprint(datetime.datetime.now().time().isoformat())# 11:20:08.272239print(datetime.datetime.now().time().strftime('%H:%M:%S.%f'))# 11:20:08.272239# But do not use this:print(time.strftime("%H:%M:%S.%f", time.localtime()), str)# 11:20:08.%f
Pero solo quiero milisegundos , ¿verdad? La forma más corta de obtenerlos:
import time
time.strftime("%H:%M:%S", time.localtime())+'.%d'%(time.time()%1*1000)# 11:34:23.751
Agregue o elimine ceros de la última multiplicación para ajustar el número de puntos decimales, o simplemente:
Porque nadie lo ha mencionado todavía, y esto es algo con lo que me encontré recientemente ... un método fromutc () de la zona horaria pytz combinado con utcnow () de datetime es la mejor manera que he encontrado para obtener una hora (y fecha) útil. en cualquier zona horaria
Esta pregunta es para Python, pero dado que Django es uno de los frameworks más utilizados para Python, es importante tener en cuenta que si está usando Django, siempre puede usar en timezone.now()lugar de datetime.datetime.now(). El primero es "consciente" de la zona horaria, mientras que el segundo no.
Respuestas:
Utilizar:
Y justo el tiempo:
Consulte la documentación para más información.
Para guardar la escritura, puede importar el
datetime
objeto desde eldatetime
módulo:Luego, quite la guía
datetime.
de todo lo anterior.fuente
datetime.datetime.now()
en mi consola interactiva Python 2.7 (IronPython aún no se ha actualizado) me da el mismo comportamiento que el ejemplo más reciente que se usaprint()
en la respuesta. No he replicado con éxito lo que muestra la respuesta original (datetime.datetime (2009, 1, 6, 15, 8, 24, 78915)). (No es que realmente quiera, se prefiere el comportamiento print (), pero tengo curiosidad.)datetime.now()
print(datetime.now())
Puedes usar
time.strftime()
:fuente
time
módulo vs. eldatetime
módulo?localtime()
lugar de lagmtime()
para obtener su hora local.datetime
contratime
.Para este ejemplo, la salida será así:
'2013-09-18 11:16:32'
Aquí está la lista de
strftime
directivas .fuente
Similar a la respuesta de Harley , pero usa la
str()
función para un formato rápido y sucio, un poco más legible para los humanos:fuente
El
time
móduloEl
time
módulo proporciona funciones que nos dicen el tiempo en "segundos desde la época", así como otras utilidades.Unix Epoch Time
Este es el formato en el que debe obtener marcas de tiempo para guardar en bases de datos. Es un número de coma flotante simple que se puede convertir en un entero. También es bueno para la aritmética en segundos, ya que representa el número de segundos desde el 1 de enero de 1970 a las 00:00:00, y es luz de memoria en relación con las otras representaciones de tiempo que veremos a continuación:
Esta marca de tiempo no tiene en cuenta los segundos bisiestos, por lo que no es lineal; los segundos bisiestos se ignoran. Entonces, si bien no es equivalente al estándar internacional UTC, está cerca y, por lo tanto, es bastante bueno para la mayoría de los casos de mantenimiento de registros.
Sin embargo, esto no es ideal para la programación humana. Si tiene un evento futuro que desea que tenga lugar en un momento determinado, querrá almacenar ese tiempo con una cadena que se pueda analizar en un objeto de fecha y hora o en un objeto de fecha y hora serializado (se describirá más adelante).
time.ctime
También puede representar la hora actual de la manera preferida por su sistema operativo (lo que significa que puede cambiar cuando cambia las preferencias de su sistema, así que no confíe en que esto sea estándar en todos los sistemas, como he visto que otros esperan) . Por lo general, esto es fácil de usar, pero no suele generar cadenas que se puedan ordenar cronológicamente:
También puede hidratar marcas de tiempo en forma legible para humanos con
ctime
:Esta conversión tampoco es buena para el mantenimiento de registros (excepto en el texto que solo será analizado por humanos, y con el reconocimiento óptico de caracteres mejorado y la inteligencia artificial, creo que el número de estos casos disminuirá).
datetime
móduloEl
datetime
módulo también es bastante útil aquí:datetime.datetime.now
El
datetime.now
es un método de clase que devuelve la hora actual. Utiliza la informacióntime.localtime
sin la zona horaria (si no se proporciona, de lo contrario, consulte la zona horaria a continuación). Tiene una representación (que le permitiría recrear un objeto equivalente) reflejada en el shell, pero cuando se imprime (o coacciona astr
), está en formato legible por humanos (y casi ISO), y el tipo lexicográfico es equivalente al tipo cronológico:fecha y hora
utcnow
Puede obtener un objeto datetime en hora UTC, un estándar global, haciendo esto:
UTC es un estándar de tiempo que es casi equivalente a la zona horaria GMT. (Si bien GMT y UTC no cambian para el horario de verano, sus usuarios pueden cambiar a otras zonas horarias, como el horario de verano británico, durante el verano).
datetime zona horaria consciente
Sin embargo, ninguno de los objetos de fecha y hora que hemos creado hasta ahora se puede convertir fácilmente a varias zonas horarias. Podemos resolver ese problema con el
pytz
módulo:De manera equivalente, en Python 3 tenemos la
timezone
clase con unatimezone
instancia de utc adjunta, que también hace que la zona horaria del objeto sea consciente (pero para convertir a otra zona horaria sin el prácticopytz
módulo se deja como ejercicio para el lector):Y vemos que podemos convertir fácilmente a zonas horarias desde el objeto utc original.
También puede hacer que un objeto datetime ingenuo sea consciente con el método de
pytz
zona horarialocalize
, o reemplazando el atributo tzinfo (conreplace
, esto se hace a ciegas), pero estos son más últimos recursos que mejores prácticas:El
pytz
módulo nos permite hacer que nuestrosdatetime
objetos conozcan la zona horaria y convertir las horas a los cientos de zonas horarias disponibles en elpytz
módulo.Una ostensiblemente podría serializar este objeto para la hora UTC y la tienda que en una base de datos, pero requeriría mucho más memoria y ser más propensos a errores que simplemente almacenar la hora Epoch Unix, que demostró por primera vez.
Las otras formas de ver los tiempos son mucho más propensas a errores, especialmente cuando se trata de datos que pueden provenir de diferentes zonas horarias. Desea que no haya confusión sobre a qué zona horaria se destina una cadena o un objeto de fecha y hora serializado.
Si está mostrando la hora con Python para el usuario,
ctime
funciona bien, no en una tabla (normalmente no se ordena bien), sino quizás en un reloj. Sin embargo, personalmente recomiendo, cuando se trata de tiempo en Python, ya sea usando tiempo Unix o undatetime
objeto UTC con reconocimiento de zona horaria .fuente
Hacer
t
- número flotante, bueno para la medición del intervalo de tiempo.Hay alguna diferencia para las plataformas Unix y Windows.
fuente
Eso genera el GMT actual en el formato especificado. También hay un
localtime()
método.Esta página tiene más detalles.
fuente
Las respuestas anteriores son buenas sugerencias, pero me parece más fácil de usar
ctime()
:Esto proporciona una representación de cadena bien formateada de la hora local actual.
fuente
La forma más rápida es:
fuente
Si necesita la hora actual como un
time
objeto:fuente
.isoformat()
está en la documentación, pero aún no está aquí (esto es muy similar a la respuesta de @Ray Vega):fuente
¿Por qué no preguntar al Observatorio Naval de los Estados Unidos, el cronometrador oficial de la Marina de los Estados Unidos?
Si vives en el área de DC (como yo), la latencia podría no ser tan mala ...
fuente
Usando pandas para obtener la hora actual, exagerando el problema en cuestión:
Salida:
fuente
Esto es con lo que terminé yendo:
Además, esta tabla es una referencia necesaria para elegir los códigos de formato apropiados para obtener el formato de la fecha tal como lo desea (de la documentación de Python "datetime" aquí ).
fuente
strftime(time_format)
devuelve la hora local actual como una cadena que corresponde a la dadatime_format
. Nota:time.strftime()
ydatetime.strftime()
admite diferentes conjuntos de directivas, por ejemplo,%z
no es compatibletime.strftime()
con Python 2 .time
funciones del módulo son envoltorios delgados alrededor de las funciones correspondientes de C.datetime
es un nivel superior y generalmente es más portátil.si ya está usando numpy, entonces directamente puede usar la función numpy.datetime64 ().
por solo fecha:
o, si ya está usando pandas, puede usar la función pandas.to_datetime ()
o,
fuente
Puedes usar el
time
módulo:El uso de la capital
Y
da el año completo, y el usoy
daría06/02/15
.También puede usar el siguiente código para dar un tiempo más largo:
fuente
datetime.now()
devuelve la hora actual como un objeto de fecha y hora ingenuo que representa la hora en la zona horaria local. Ese valor puede ser ambiguo, por ejemplo, durante las transiciones DST ("retroceso"). Para evitar ambigüedades, se debe usar la zona horaria UTC:O un objeto compatible con la zona horaria que tiene la información correspondiente de la zona horaria adjunta (Python 3.2+):
fuente
Do
dir(date)
o cualquier variable, incluido el paquete. Puede obtener todos los atributos y métodos asociados con la variable.fuente
import datetime
esdatetime.datetime.now()
\ n sifrom datetime import datetime
es asídatetime.now()
fuente
Por defecto, la
now()
función devuelve la salida en elYYYY-MM-DD HH:MM:SS:MS
formato. Use el script de muestra a continuación para obtener la fecha y hora actuales en un script de Python e imprimir los resultados en la pantalla. Cree un archivogetDateTime1.py
con el contenido a continuación.El resultado se ve a continuación:
fuente
Esta pregunta no necesita una nueva respuesta solo por el hecho de que ... un nuevo juguete / módulo brillante, sin embargo, es suficiente justificación. Esa es la biblioteca de Péndulo , que parece hacer el tipo de cosas que intentaba la flecha, excepto sin los defectos y errores inherentes que acosan a la flecha.
Por ejemplo, la respuesta a la pregunta original:
Hay muchos estándares que deben abordarse, incluidos múltiples RFC e ISO, de los que preocuparse. Alguna vez los mezcló; no se preocupe, eche un vistazo a
dir(pendulum.constants)
embargo, Hay un poco más que los formatos RFC e ISO allí.Cuando decimos local, ¿a qué nos referimos? Bueno, quiero decir:
Presumiblemente, la mayoría del resto de ustedes quiere decir en otro lugar.
Y así sigue. Larga historia corta: Pendulum intenta hacer por fecha y hora lo que hicieron las solicitudes de HTTP. Vale la pena considerarlo, especialmente por su facilidad de uso y su extensa documentación.
fuente
Hora actual de una zona horaria
fuente
Pruebe el módulo de flecha de http://crsmithdev.com/arrow/ :
O la versión UTC:
Para cambiar su salida, agregue .format ():
Para una zona horaria específica:
Hace una hora:
O si quieres la esencia.
fuente
arrow.now('Time/Zone')
puede fallar para algunas zonas horarias (arrow
usosdateutil
que han roto utc -> conversiones locales que se usan dentroarrow.now()
. Nota:pytz
no tiene ese problema . Además, hay otros problemas relacionados con la zona horariaQuiero pasar el tiempo con milisegundos. Una forma simple de obtenerlos:
Pero solo quiero milisegundos , ¿verdad? La forma más corta de obtenerlos:
Agregue o elimine ceros de la última multiplicación para ajustar el número de puntos decimales, o simplemente:
fuente
Puede usar esta función para obtener la hora (desafortunadamente no dice AM o PM):
Para obtener las horas, minutos, segundos y milisegundos para fusionarse más tarde, puede usar estas funciones:
Hora:
Minuto:
Segundo:
Milisegundo:
fuente
Si solo desea la marca de tiempo actual en ms (por ejemplo, para medir el tiempo de ejecución), también puede usar el módulo "timeit":
fuente
Porque nadie lo ha mencionado todavía, y esto es algo con lo que me encontré recientemente ... un método fromutc () de la zona horaria pytz combinado con utcnow () de datetime es la mejor manera que he encontrado para obtener una hora (y fecha) útil. en cualquier zona horaria
Si todo lo que quieres es el tiempo, puedes conseguirlo
local_time.time()
.fuente
Lo siguiente es lo que uso para obtener el tiempo sin tener que formatear. A algunas personas no les gusta el método de división, pero es útil aquí:
Se imprimirá en formato HH: MM: SS.
fuente
Esta pregunta es para Python, pero dado que Django es uno de los frameworks más utilizados para Python, es importante tener en cuenta que si está usando Django, siempre puede usar en
timezone.now()
lugar dedatetime.datetime.now()
. El primero es "consciente" de la zona horaria, mientras que el segundo no.Vea esta respuesta SO y el documento de Django para obtener detalles y justificación
timezone.now()
.fuente
Puedes hacerlo usando ctime ():
salida:
Sat Sep 14 21:27:08 2019
Estas salidas son diferentes porque la marca de tiempo devuelta por
ctime()
depende de su ubicación geográfica.fuente