Manipule la fecha y la hora con el módulo de fecha y hora en Python

¿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.

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.

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *