Cómo obtener la fecha y hora actuales en Python

Iniciar sesión, guardar registros, acceder a archivos y tareas son muy comunes. En todos ellos, obtener la fecha y la hora actuales suele ser crucial. Podemos extraer la fecha y hora actuales usando el módulo de fecha y hora en Python.

Introducción

Registrar, guardar registros en la base de datos y acceder a archivos son tareas comunes en las que trabaja un programador. En cada uno de esos casos, la fecha y la hora juegan un papel importante en la preservación del significado y la integridad de los datos. Los programadores a menudo necesitan comprometerse con la fecha y la hora.

En este artículo aprenderemos cómo obtener la fecha y la hora actual usando el módulo fecha y hora de Python. Con ese módulo, podemos obtener todos los datos relevantes en un objeto o extraer la fecha y la hora por separado.

También aprenderemos cómo ajustar nuestra fecha y hora para diferentes zonas horarias. Finalmente, veremos cómo convertir objetos datetime a las populares marcas de tiempo Unix o Epoch.

Obtención de la fecha y la hora actuales con fecha y hora {#obtención de la fecha y hora actuales con fecha y hora}

El módulo datetime contiene varias clases para obtener información sobre la fecha y la hora:

  • datetime.date: Almacena el día, mes y año o una fecha
  • datetime.time: Almacena la hora en horas, minutos, segundos y microsegundos. Esta información es independiente de cualquier fecha.
  • datetime.datetime: almacena los atributos fecha y hora

Obtengamos la fecha y la hora actuales con un objeto datetime.datetime, ya que es más fácil extraer los objetos date y time de él. Primero, importemos el módulo datetime:

1
from datetime import datetime

Si bien parece extraño al principio, estamos obteniendo la clase datetime del módulo datetime, que son dos cosas separadas.

Podemos usar la función now() para obtener un objeto con la fecha y hora actual:

1
2
current_datetime = datetime.now()
print(current_datetime)

Ejecutar este archivo nos dará el siguiente resultado:

1
2019-12-13 12:18:18.290623

La función now() nos dio un objeto con toda la fecha y hora del momento en que fue creado. Cuando lo imprimimos, Python formatea automáticamente el objeto en una cadena para que los humanos puedan leerlo fácilmente. Puedes leer nuestra guía sobre Cómo formatear fechas en Python para aprender varias formas de imprimir la hora.

Puede obtener atributos individuales de la fecha y la hora de esta manera:

1
2
3
4
5
6
7
print(current_datetime.year)            # 2019
print(current_datetime.month)           # 12
print(current_datetime.day)             # 13
print(current_datetime.hour)            # 12
print(current_datetime.minute)          # 18
print(current_datetime.second)          # 18
print(current_datetime.microsecond)     # 290623

El método now() es perfecto para capturar un momento. Sin embargo, es redundante cuando solo te importa la fecha o la hora, pero no ambas. ¿Cómo podemos obtener información de fecha solamente?

Obtener la fecha actual

Hay dos formas de obtener la fecha actual en Python. En la consola de Python, podemos obtener la fecha de un objeto datetime con el método date():

1
2
3
4
>>> from datetime import datetime
>>> current_date = datetime.now().date()
>>> print(current_date)
2019-12-13

Sin embargo, parece un desperdicio inicializar un objeto datetime solo para capturar la fecha. Una alternativa sería usar el método today() de la clase date:

1
2
3
4
>>> from datetime import date
>>> current_date = date.today()
>>> print(current_date)
2019-12-13

La clase datetime.date representa una fecha del calendario. Se puede acceder a sus atributos año, mes y día de la misma manera que accedemos a ellos en el objeto fechahora.

Por ejemplo, esta instrucción print obtiene cada atributo y también usa el método weekday() para obtener el día de la semana:

1
2
3
>>> print("It's the %dth day of the week, %dth day of the %dth month of the %dth year" %
... (current_date.weekday()+1, current_date.day, current_date.month, current_date.year))
It's the 5th day of the week, 13th day of the 12th month of the 2019th year

Nota: El método weekday() devuelve un número entero entre 0 y 6 para representar el día de la semana. 0 corresponde al lunes. Por lo tanto, en nuestro ejemplo agregamos 1 para imprimir el 5° día de la semana (viernes), aunque el método weekday() devolvió 4.

Ahora que podemos obtener la fecha actual por sí sola, veamos cómo podemos obtener la hora actual

Obtener la hora actual

Capturamos la hora actual de un objeto datetime usando el método time():

1
2
3
4
>>> from datetime import datetime
>>> current_time = datetime.now().time()
>>> print(current_time)
12:18:18.290623

A diferencia de la recuperación de fechas, no hay un atajo para capturar la hora actual directamente. La clase datetime.time representa una noción de tiempo en horas, minutos, segundos y microsegundos, cualquier cosa que sea menos de un día.

Al igual que el objeto datetime, podemos acceder a sus atributos directamente. Aquí hay un ejemplo donde imprimimos current_time en una oración:

1
2
3
>>> print("It's %d o'clock. To be exact, it's %d:%d and %d seconds with %d microseconds" %
... (current_time.hour, current_time.hour, current_time.minute, current_time.second, current_time.microsecond))
It's 12 o'clock. To be exact, it's 12:18 and 18 seconds with 290623 microseconds

Por defecto, la función now() devuelve la hora de su zona horaria local. ¿Qué pasa si tuviéramos que convertirlo a uno diferente que se configuró en la preferencia de un usuario? Veamos cómo podemos proporcionar información de la zona horaria para obtener objetos time localizados.

Obtención de la fecha y la hora actuales en una zona horaria diferente {#obtención de la fecha y la hora actuales en una zona horaria diferente}

El método now() acepta una zona horaria como argumento, por lo que el objeto datetime que se genera se ajustaría adecuadamente. Primero, necesitamos obtener los datos de la zona horaria a través de la biblioteca pytz.

Instale la biblioteca pytz con pip si aún no está disponible en su computadora:

1
$ pip3 install pytz

Ahora, usemos pytz para obtener la fecha y hora actual si estuviéramos en Berlín:

1
2
3
4
5
6
>>> import pytz
>>> from datetime import datetime
>>> tz = pytz.timezone('Europe/Berlin')
>>> berlin_current_datetime = datetime.now(tz)
>>> print(berlin_current_datetime)
2019-12-14 00:20:50.840350+01:00

berlin_current_datetime sería un objeto datetime con todas las propiedades y funciones que vimos anteriormente, pero ahora encaja perfectamente con lo que es para alguien que vive allí.

Si desea obtener la hora en UTC, puede usar el módulo pytz como antes:

1
2
3
4
5
>>> import pytz
>>> from datetime import datetime
>>> utc_current_datetime = datetime.now(pytz.timezone("UTC"))
>>> print(utc_current_datetime)
2019-12-13 23:20:50.840350+00:00

Alternativamente, para la hora UTC no tiene que usar el módulo pytz en absoluto. El módulo datetime tiene una propiedad timezone, que se puede usar así:

1
2
3
4
>>> from datetime import datetime, timezone
>>> utc_current_datetime = datetime.now(timezone.utc)
>>> print(utc_current_datetime)
2019-12-13 23:20:50.840350+00:00

Ahora que podemos convertir nuestras fechas y horas para que coincidan con diferentes zonas horarias, veamos cómo podemos convertirlo a uno de los formatos más utilizados en informática: las marcas de tiempo de Unix.

Convertir marcas de tiempo en fechas y horas {#convertir marcas de tiempo en fechas y horas}

Los sistemas informáticos miden el tiempo en función de la cantidad de segundos transcurridos desde la época de Unix, es decir, a las 00:00:00 UTC del 1 de enero de 1970. Es común que las aplicaciones, las bases de datos y los protocolos utilicen una marca de tiempo para mostrar tiempo.

Puede obtener la marca de tiempo actual en Python usando la biblioteca time:

1
2
3
>>> import time
>>> print(time.time())
1576280665.0915806

La función time.time() devuelve un número flotante con la marca de tiempo de Unix. Puede convertir una marca de tiempo en un objeto datetime utilizando la función fromtimestamp():

1
2
3
>>> from datetime import datetime
>>> print(datetime.fromtimestamp(1576280665))
2019-12-13 19:44:25

De forma predeterminada, fromtimestamp() devuelve un objeto datetime en su zona horaria. Puede proporcionar una zona horaria como segundo argumento si desea que se localice de manera diferente.

Por ejemplo, para convertir una marca de tiempo en un objeto datetime en UTC, puede hacer esto:

1
2
3
>>> from datetime import datetime, timezone
>>> print(datetime.fromtimestamp(1576280665, timezone.utc))
2019-12-13 19:44:25+00:00

Por el contrario, puede usar el método timestamp() para convertir un objeto datetime en una marca de tiempo válida:

1
2
3
>>> from datetime import datetime, timezone
>>> print(datetime.now(timezone.utc).timestamp())
1577117555.940705

Conclusión

La biblioteca datetime incorporada de Python nos permite obtener la fecha y la hora actuales con la función now(). Podemos usar el objeto datetime devuelto para extraer solo la parte de la fecha o la parte de la hora. También podemos obtener la fecha actual con la función today().

Por defecto, Python crea objetos datetime en nuestra zona horaria local. Si utilizamos la biblioteca pytz, podemos convertir fechas y horas en diferentes zonas horarias.

Finalmente, usamos la función fromtimestamp() para tomar una marca de tiempo de Unix para obtener un objeto datetime. Si tenemos un objeto datetime, podemos obtener una marca de tiempo usando su método timestamp(). )`.

Licensed under CC BY-NC-SA 4.0