¿Cómo obtengo la hora actual en Python?

Resuelto user46646 asked hace 15 años • 54 respuestas

¿Cómo obtengo la hora actual en Python?

user46646 avatar Jan 06 '09 11:01 user46646
Aceptado

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 datetimeobjeto desde el datetimemódulo:

>>> from datetime import datetime

Luego elimine el prefijo datetime.de todo lo anterior.

Harley Holcombe avatar Jan 06 '2009 04:01 Harley Holcombe

Usar time.strftime():

>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
Sean James avatar Jan 06 '2009 04:01 Sean James
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 strftimedirectivas .

ParaMeterz avatar Jan 09 '2013 05:01 ParaMeterz

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'
Ray avatar May 04 '2011 00:05 Ray

¿Cómo obtengo la hora actual en Python?

El timemódulo

El timemó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 datetimeobjeto o en un datetimeobjeto 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'

ctimeTambié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á).

datetimemódulo

El datetimemódulo también es bastante útil aquí:

>>> import datetime

datetime.datetime.now

Es datetime.nowun método de clase que devuelve la hora actual. Utiliza time.localtimesin 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 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 instancia utc timezoneadjunta, lo que también hace que la zona horaria del objeto sea consciente (pero convertir a otra zona horaria sin el práctico pytzmó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 pytzde zona horaria localizeo 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 pytzmódulo nos permite hacer que nuestros datetimeobjetos tengan en cuenta la zona horaria y convertir las horas a los cientos de zonas horarias disponibles en el pytzmó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, 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, usar el tiempo Unix o un datetimeobjeto UTC que reconozca la zona horaria.

Russia Must Remove Putin avatar Feb 18 '2015 05:02 Russia Must Remove Putin

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.

maxp avatar Jan 06 '2009 13:01 maxp