¿Cómo obtengo la hora actual en Python?
¿Cómo obtengo la hora actual en Python?
Usar datetime
:
>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2009, 1, 6, 15, 8, 24, 78915)
>>> print(now)
2009-01-06 15:08:24.789150
Sólo para la hora del reloj sin la fecha:
>>> now.time()
datetime.time(15, 8, 24, 78915)
>>> print(now.time())
15:08:24.789150
Para ahorrar escritura, puede importar el datetime
objeto desde el datetime
módulo:
>>> from datetime import datetime
Luego elimine el prefijo datetime.
de todo lo anterior.
Usar time.strftime()
:
>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')
Salida de ejemplo:'2013-09-18 11:16:32'
Ver lista de strftime
directivas .
Similar a la respuesta de Harley , pero use la str()
función para un formato rápido y sucio, un poco más legible por humanos:
>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'
¿Cómo obtengo la hora actual en Python?
El time
módulo
El time
módulo proporciona funciones que nos indican el tiempo en "segundos desde la época", así como otras utilidades.
import time
Tiempo de la época Unix
Este es el formato en el que debe obtener las marcas de tiempo para guardarlas en las bases de datos. Es un número simple de punto flotante que se puede convertir a un número 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, 00:00:00, y es luz de memoria en relación con las otras representaciones del tiempo que veremos a continuación:
>>> time.time()
1424233311.771502
Esta marca de tiempo no tiene en cuenta los segundos intercalares, por lo que no es lineal: se ignoran los segundos intercalares. Entonces, si bien no es equivalente al estándar internacional UTC, se acerca 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 pueda analizarse en un datetime
objeto o en un datetime
objeto serializado (estos se describirán más adelante).
time.ctime
También puede representar la hora actual en la forma 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). . Esto suele ser fácil de usar, pero no suele generar cadenas que se puedan ordenar cronológicamente:
>>> time.ctime()
'Tue Feb 17 23:21:56 2015'
ctime
También puedes hidratar las marcas de tiempo en un formato legible por humanos con :
>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'
Esta conversión tampoco es buena para el mantenimiento de registros (excepto en texto que sólo será analizado por humanos, y con el reconocimiento óptico de caracteres y la inteligencia artificial mejorados, creo que el número de estos casos disminuirá).
datetime
módulo
El datetime
módulo también es bastante útil aquí:
>>> import datetime
datetime.datetime.now
Es datetime.now
un método de clase que devuelve la hora actual. Utiliza time.localtime
sin la información de 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) que se repite en el shell, pero cuando se imprime (o se convierte en str
), está en formato legible por humanos (y casi ISO), y el tipo lexicográfico es equivalente al orden cronológico:
>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461
fecha y horautcnow
Puede obtener un objeto de fecha y hora en hora UTC, un estándar global, haciendo esto:
>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988
UTC es un estándar horario que es casi equivalente a la zona horaria GMT. (Si bien GMT y UTC no cambian según el horario de verano, sus usuarios pueden cambiar a otras zonas horarias, como el horario de verano británico, durante el verano).
fechahora 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 solucionar ese problema con el pytz
mó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 timezone
clase con una instancia utc timezone
adjunta, lo que también hace que la zona horaria del objeto sea consciente (pero convertir a otra zona horaria sin el práctico pytz
módulo se deja como ejercicio para el lector):
>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)
Y vemos que podemos convertir fácilmente a zonas horarias desde el objeto UTC original.
>>> print(then)
2015-02-18 04:55:58.753949+00:00
>>> print(then.astimezone(pytz.timezone('US/Eastern')))
2015-02-17 23:55:58.753949-05:00
También puedes hacer que un objeto ingenuo de fecha y hora sea consciente con el método pytz
de zona 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:
>>> pytz.utc.localize(datetime.datetime.utcnow())
datetime.datetime(2015, 2, 18, 6, 6, 29, 32285, tzinfo=<UTC>)
>>> datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
datetime.datetime(2015, 2, 18, 6, 9, 30, 728550, tzinfo=<UTC>)
El pytz
módulo nos permite hacer que nuestros datetime
objetos tengan en cuenta la zona horaria y convertir las horas a los cientos de zonas horarias disponibles en el pytz
módulo.
Aparentemente, se podría serializar este objeto para la hora UTC y almacenarlo en una base de datos, pero requeriría mucha más memoria y sería más propenso a errores que simplemente almacenar la hora de Unix Epoch, lo cual demostré primero.
Las otras formas de ver las horas 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 estaba destinada una cadena o un objeto de fecha y hora serializado.
Si muestra 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, usar el tiempo Unix o un datetime
objeto UTC que reconozca la zona horaria.
Hacer
from time import time
t = time()
t
- número flotante, bueno para medir intervalos de tiempo.
Existe alguna diferencia para las plataformas Unix y Windows.