Introducci贸n
Contenido
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 interactuar con la fecha y la hora.
En este art铆culo, aprenderemos c贸mo obtener la fecha y la hora actuales usando la funci贸n incorporada de Python fecha y hora m贸dulo. 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 datetime
objetos a las populares marcas de tiempo de Unix o Epoch.
Obtener la fecha y hora actuales con datetime
los datetime
El m贸dulo 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 fechadatetime.time
: Almacena el tiempo en horas, minutos, segundos y microsegundos. Esta informaci贸n es independiente de cualquier fechadatetime.datetime
: Almacena ambosdate
ytime
atributos
Obtengamos la fecha y hora actuales con un datetime.datetime
objeto, ya que es m谩s f谩cil de extraer date
y time
objetos de ella. Primero, importemos el datetime
m贸dulo:
from datetime import datetime
Si bien parece extra帽o al principio, estamos obteniendo la datetime
clase de la datetime
m贸dulo, que son dos cosas separadas.
Podemos usar el now()
funci贸n para obtener un objeto con la fecha y hora actual:
current_datetime = datetime.now()
print(current_datetime)
Ejecutar este archivo nos dar谩 el siguiente resultado:
2019-12-13 12:18:18.290623
los now()
La funci贸n 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. Puede 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:
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
los now()
El m茅todo es perfecto para capturar un momento. Sin embargo, es redundante cuando solo le importa la fecha o la hora, pero no ambas. 驴C贸mo podemos obtener solo informaci贸n sobre la fecha?
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 datetime
objeto con el date()
m茅todo:
>>> from datetime import datetime
>>> current_date = datetime.now().date()
>>> print(current_date)
2019-12-13
Sin embargo, parece un desperdicio inicializar un datetime
Objeto solo para capturar la fecha. Una alternativa ser铆a utilizar el today()
m茅todo del date
clase:
>>> from datetime import date
>>> current_date = date.today()
>>> print(current_date)
2019-12-13
los datetime.date
la clase representa una fecha del calendario. Sus year
, month
y day
se puede acceder a los atributos de la misma manera que accedemos a ellos en el datetime
objeto.
Por ejemplo, este print
declaraci贸n obtiene cada atributo, y tambi茅n usa el weekday()
m茅todo para obtener el d铆a de la semana:
>>> 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: Los weekday()
El m茅todo 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 quinto d铆a de la semana (viernes), aunque el weekday()
m茅todo devuelto 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 datetime
objeto usando el time()
m茅todo:
>>> 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 existe un atajo para capturar la hora actual directamente. los datetime.time
class representa una noci贸n de tiempo en horas, minutos, segundos y microsegundos, cualquier cosa que sea menos de un d铆a.
Como el datetime
objeto, podemos acceder a sus atributos directamente. Aqu铆 hay un ejemplo donde imprimimos el current_time
en una frase:
>>> 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, el now()
La funci贸n devuelve la hora de su zona horaria local. 驴Qu茅 pasar铆a si tuvi茅ramos que convertirlo en uno diferente que se estableci贸 en la preferencia de un usuario? Veamos c贸mo podemos proporcionar informaci贸n de la zona horaria para localizar time
objetos.
Obtener la fecha y la hora actuales en una zona horaria diferente
los now()
acepta una zona horaria como argumento, de modo que el datetime
objeto que se est谩 generando se ajustar谩 adecuadamente. Primero, necesitamos obtener datos de la zona horaria a trav茅s del Pytz biblioteca.
Instala el pytz
biblioteca con pip
si a煤n no est谩 disponible en su computadora:
$ pip3 install pytz
Ahora, usemos pytz
para obtener la fecha y hora actual si estuvi茅ramos en Berl铆n:
>>> 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
los berlin_current_datetime
seria un datetime
objeto 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 utilizar el pytz
m贸dulo como antes:
>>> 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 pytz
m贸dulo en absoluto. los datetime
el m贸dulo tiene un timezone
propiedad, que se puede utilizar as铆:
>>> 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 Unix.
Conversi贸n de marcas de tiempo en fechas y horas
Los sistemas inform谩ticos miden el tiempo en funci贸n del n煤mero de segundos transcurridos desde la 茅poca Unix, es decir, 00:00:00 UTC del 1 de enero de 1970. Es com煤n que las aplicaciones, bases de datos y protocolos utilicen una marca de tiempo para mostrar el tiempo.
Puede obtener la marca de tiempo actual en Python usando el time
biblioteca:
>>> import time
>>> print(time.time())
1576280665.0915806
los time.time()
La funci贸n devuelve un n煤mero flotante con la marca de tiempo de Unix. Puede convertir una marca de tiempo en un datetime
objeto usando el fromtimestamp()
funci贸n:
>>> from datetime import datetime
>>> print(datetime.fromtimestamp(1576280665))
2019-12-13 19:44:25
Por defecto, el fromtimestamp()
devuelve un datetime
objeto 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 datetime
objeto en UTC, puede hacer esto:
>>> from datetime import datetime, timezone
>>> print(datetime.fromtimestamp(1576280665, timezone.utc))
2019-12-13 19:44:25+00:00
Por el contrario, puede utilizar el timestamp()
m茅todo para convertir un datetime
objetar a una marca de tiempo v谩lida:
>>> from datetime import datetime, timezone
>>> print(datetime.now(timezone.utc).timestamp())
1577117555.940705
Conclusi贸n
Python incorpora datetime
esta biblioteca nos permite obtener la fecha y hora actual con la now()
funci贸n. Podemos usar el devuelto datetime
objeto para extraer solo la parte de la fecha o la parte de la hora. Tambi茅n podemos obtener la fecha actual con el today()
funci贸n.
Por defecto, Python crea datetime
objetos en nuestra zona horaria local. Si utilizamos el pytz
biblioteca, podemos convertir fechas y horas en diferentes zonas horarias.
Finalmente, usamos el fromtimestamp()
funci贸n para tomar una marca de tiempo Unix para obtener una datetime
objeto. Si tenemos un datetime
objeto, podemos obtener una marca de tiempo usando su timestamp()
m茅todo.