¿Alguna vez te has preguntado acerca de cómo trabajar con fecha y hora con Python? Si es así, debe haber notado que Python no proporciona ningún método integrado para trabajar con Fecha u Hora. Pero gracias al módulo DateTime que viene precargado con los módulos de utilidad estándar de Python, podemos manipular fácilmente la fecha y la hora según nuestras necesidades. Incluso podemos realizar operaciones como obtener una fecha actual, sumar o restar fecha y hora, y mucho más.
En este artículo, aprenderemos todas las operaciones que se pueden realizar en la fecha y la hora usando el módulo DateTime en Python. Entonces, antes de comenzar, veamos los conceptos básicos del módulo DateTime y las clases que contiene.
Las clases de fecha y hora se clasifican en 6 clases principales:
- fecha: una fecha ingenua idealizada, suponiendo que el calendario gregoriano actual siempre estuvo, y siempre estará, en vigor. Sus atributos son año, mes y día.
- tiempo: un tiempo idealizado, independiente de cualquier día en particular, asumiendo que cada día tiene exactamente 24*60*60 segundos. Sus atributos son hora, minuto, segundo, microsegundo y tzinfo.
- datetime: es una combinación de fecha y hora junto con los atributos año, mes, día, hora, minuto, segundo, microsegundo y tzinfo.
- timedelta: una duración que expresa la diferencia entre dos instancias de fecha, hora o fecha y hora con una resolución de microsegundos.
- tzinfo: proporciona objetos de información de zona horaria.
- zona horaria: una clase que implementa la clase base abstracta tzinfo como un desplazamiento fijo del UTC (nuevo en la versión 3.2).
Obtener la fecha y hora actuales
Para obtener tanto la fecha como la hora actual , se utiliza el método datetime.now() . Devuelve la fecha y hora local actual.
Sintaxis:
fechahora.ahora(tz)
Ejemplo:
Python3
# Python3 code to demonstrate # Getting current date and time using # now(). # importing datetime module for now() import datetime # using now() to get current time current_time = datetime.datetime.now() # Printing value of now. print ("Time now at greenwich meridian is : ", end = "") print (current_time)
Producción:
Time now at greenwich meridian is : 2021-03-16 17:59:03.837572
La función now() tiene varios atributos que pueden brindar el detalle deseado del resultado anterior. Algunos de los atributos son año, mes, fecha, hora, minuto, segundo. Vea el siguiente ejemplo para una mejor comprensión.
Ejemplo:
Python3
# Python3 code to demonstrate # attributes of now() # importing datetime module for now() import datetime # using now() to get current time current_time = datetime.datetime.now() # Printing attributes of now(). print ("The attributes of now() are : ") print ("Year : ", end = "") print (current_time.year) print ("Month : ", end = "") print (current_time.month) print ("Day : ", end = "") print (current_time.day) print ("Hour : ", end = "") print (current_time.hour) print ("Minute : ", end = "") print (current_time.minute) print ("Second : ", end = "") print (current_time.second) print ("Microsecond : ", end = "") print (current_time.microsecond)
Producción:
The attributes of now() are : Year : 2021 Month : 3 Day : 16 Hour : 18 Minute : 1 Second : 59 Microsecond : 490402
Obtener solo la fecha actual
El módulo DateTime también proporciona otro método llamado today() que solo imprime el valor de la fecha de hoy.
Ejemplo:
Python3
# Python program to get # current date # Import date class from datetime module from datetime import date # Returns the current local date today = date.today() print("Today date is: ", today)
Producción:
Today date is: 2021-03-16
Obtener solo la hora actual
Podemos crear un objeto de tiempo usando la función time() . Considere el siguiente ejemplo.
Ejemplo:
Python3
from datetime import datetime # Time object containing # the current time. time = datetime.now().time() print("Current Time =", time)
Producción:
Current Time = 18:13:35.003918
Consulte los artículos a continuación para obtener información detallada sobre cómo obtener la fecha y la hora actuales.
- Obtenga la fecha y hora actuales usando Python
- Obtener la fecha actual usando Python
- Programa de Python para obtener la hora actual
- Obtenga la hora actual en milisegundos usando Python
- Obtenga la hora actual en diferentes zonas horarias usando Python
Formateo de fecha y hora
En varias regiones del mundo, se utilizan diferentes tipos de formatos de fecha. DateTime proporciona el método strftime() para manejar dicho formato. Esta función se utiliza para convertir objetos de fecha y hora a su representación de string. Toma una o más entradas de código formateado y devuelve la representación de string.
Sintaxis:
strftime(formato)
Ejemplo:
Python3
# Python program to demonstrate # strftime() function from datetime import datetime # Getting current date and time now = datetime.now() print("Without formatting", now) # Example 1 s = now.strftime("%a %m %y") print('\nExample 1:', s) # Example 2 s = now.strftime("%A %-m %Y") print('\nExample 2:', s) # Example 3 s = now.strftime("%-I %p %S") print('\nExample 3:', s) # Example 4 s = now.strftime("%-j") print('\nExample 4:', s)
Producción:
Without formatting 2021-03-16 18:28:59.055609 Example 1: Tue 03 21 Example 2: Tuesday 3 2021 Example 3: 6 PM 59 Example 4: 75
Consulte el siguiente artículo para obtener información detallada sobre cómo formatear la fecha y la hora en Python.
Manejo de objetos timedelta
La función Python timedelta() está presente en la biblioteca de fecha y hora, que generalmente se usa para calcular las diferencias en las fechas y también se puede usar para la manipulación de fechas en Python.
Sintaxis:
timedelta(días=0, segundos=0, microsegundos=0, milisegundos=0, minutos=0, horas=0, semanas=0)
Ejemplo:
Python3
# import datetime from datetime import timedelta # create timedelta object with difference # of 1 weeks d1 = timedelta(weeks=1) # create timedelta object with difference # of 1 weeks d2 = timedelta(days=30) print(d1) print(d2)
Producción:
7 days, 0:00:00 30 days, 0:00:00
También podemos usar los operadores + y – para sumar o restar los objetos timedelta de los objetos datetime.
Ejemplo:
Python3
# Timedelta function demonstration from datetime import datetime, timedelta # Using current time ini_time_for_now = datetime.now() # printing initial_date print ("initial_date", str(ini_time_for_now)) # Calculating future dates # for two years future_date_after_2yrs = ini_time_for_now + timedelta(days = 730) future_date_after_2days = ini_time_for_now + timedelta(days = 2) # printing calculated future_dates print('future_date_after_2yrs:', str(future_date_after_2yrs)) print('future_date_after_2days:', str(future_date_after_2days))
Producción:
initial_date 2021-03-16 18:47:53.103230 future_date_after_2yrs: 2023-03-16 18:47:53.103230 future_date_after_2days: 2021-03-18 18:47:53.103230
Nota: La salida será un objeto DateTime.
Diferencia entre dos fechas
Como se discutió anteriormente, el objeto timedelta representa la diferencia entre las dos fechas. Podemos restar una fecha de otra y la resultante será un objeto timedelta.
Ejemplo 1:
Python3
# import datetime from datetime import date # Create two dates with year, month, # date d1 = date(2021, 3, 16) d2 = date(2021, 3, 31) # Difference between two dates diff = d2 - d1 print("Difference: ", diff.days)
Producción:
Difference: 15
Ejemplo 2:
Python3
# import datetime from datetime import datetime # Create two dates with year, month, # date, hour, minute, seconds d1 = datetime(2021, 3, 16, 19, 6, 6) d2 = datetime(2021, 3, 31, 12, 2, 2) # Difference between two dates diff = d2 - d1 print("Difference: ", diff)
Producción:
Difference: 14 days, 16:55:56
Consulte los artículos a continuación para obtener información detallada sobre cómo encontrar diferencias en la fecha.
- Diferencia entre dos fechas (en minutos) usando el método datetime.timedelta()
- Programa de Python para encontrar el número de días entre dos fechas dadas
Comparando fechas
Las fechas también se pueden comparar usando operadores de comparación (como <, >, <=, >=, != etc.)
Ejemplo 1: uso de operadores de comparación
Python3
# Simple Python program to compare dates # importing datetime module import datetime # date in yyyy/mm/dd format d1 = datetime.datetime(2018, 5, 3) d2 = datetime.datetime(2018, 6, 1) # Comparing the dates will return # either True or False print("d1 is greater than d2 : ", d1 > d2) print("d1 is less than d2 : ", d1 < d2) print("d1 is not equal to d2 : ", d1 != d2)
Producción:
d1 is greater than d2 : False d1 is less than d2 : True d1 is not equal to d2 : True
Consulte el siguiente artículo para obtener información detallada sobre la comparación de fechas.
Trabajar con diferentes zonas horarias
El datetime.now() no tiene ninguna información sobre las zonas horarias. Simplemente utiliza la hora actual del sistema. En algunas situaciones, es posible que se necesiten los detalles de la zona horaria. En tales casos se utiliza la clase abstracta tzinfo. tzinfo es una clase base abstracta. No se puede instanciar directamente. Una subclase concreta tiene que derivarla e implementar los métodos proporcionados por esta clase abstracta.
Objetos de fecha y hora Naive y Aware
Se dice que un objeto de fecha y hora que no contiene ninguna información sobre la zona horaria es un objeto de fecha y hora ingenuo. Para un objeto de fecha y hora ingenuo, datetime_object.tzinfo será Ninguno. Un objeto de fecha y hora de Aware contiene la información de la zona horaria incrustada en él.
Los métodos disponibles para la implementación en la clase base tzinfo son:
- utcoffset(): Devuelve el desplazamiento de la instancia de fecha y hora pasada como argumento. Se refiere al desplazamiento de la zona horaria que indica cuántas horas la zona horaria está por delante de la hora universal coordinada o la hora universal coordinada (UTC). El desplazamiento se escribe como +00:00. Por ejemplo: para Asia/Taipei, se escribe como UTC+08:00.
- dst(): Se abrevia como horario de verano. Indica adelantar el reloj 1 hora en verano para que la oscuridad caiga más tarde según el reloj. Está activado o desactivado. Se verifica en base a una tupla que contiene 9 elementos de la siguiente manera:
(dt.año, dt.mes, dt.día, dt.hora, dt.minuto, dt.segundo, dt.día de la semana(), 0, 0)
- tzname(): Esto se usa para encontrar el nombre de la zona horaria del objeto de fecha y hora pasado. Devuelve un objeto Python String.
- fromutc(): esta función toma la fecha y la hora del objeto en UTC y devuelve la hora local equivalente. Se utiliza principalmente para ajustar la fecha y la hora. Se llama desde la implementación predeterminada de datetime.astimezone(). El dt.tzinfo se pasará como propio, los datos de fecha y hora de dt se devolverán como una hora local equivalente.
Ejemplo:
Python3
import datetime as dt from dateutil import tz tz_string = dt.datetime.now(dt.timezone.utc).astimezone().tzname() print("datetime.now() :", tz_string) NYC = tz.gettz('Europe / Berlin') dt1 = dt.datetime(2015, 5, 21, 12, 0) dt2 = dt.datetime(2015, 12, 21, 12, 0, tzinfo = NYC) print("Naive Object :", dt1.tzname()) print("Aware Object :", dt2.tzname())
Producción:
datetime.now() : UTC Naive Object : None Aware Object : CET
También podemos usar el módulo pytz para hacer frente a la conversión de zonas horarias cruzadas. Vamos a ver cómo funciona.
Usando Pytz
Pytz trae la base de datos Olson tz a Python y, por lo tanto, es compatible con casi todas las zonas horarias. Este módulo sirve para las funcionalidades de conversión de fecha y hora y ayuda al usuario a atender la base de clientes internacionales.
Al usar la función astimezone() podemos convertir la hora en una zona horaria diferente.
Sintaxis:
comozonahoraria(t)
Ejemplo:
Python3
from datetime import datetime from pytz import timezone format = "%Y-%m-%d %H:%M:%S %Z%z" # Current time in UTC now_utc = datetime.now(timezone('UTC')) print(now_utc.strftime(format)) # Convert to Asia/Kolkata time zone now_asia = now_utc.astimezone(timezone('Asia/Kolkata')) print(now_asia.strftime(format))
Producción:
2021-03-17 07:41:19 UTC+0000 2021-03-17 13:11:19 IST+0530
Consulte los artículos a continuación para obtener información detallada sobre cómo trabajar con zonas horarias.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA