Trabajar con objetos de fecha y hora y zonas horarias en Python

En este artículo, trabajaremos con objetos Datetime y aprenderemos sobre su comportamiento cuando se introduzcan zonas horarias. Vamos a trabajar con el módulo de fecha y hora de Python .

Obtener un objeto de fecha y hora

Método 1 : Usar el método now()

Una manera muy fácil de obtener un objeto Datetime es usar el método datetime.now() . Un objeto DateTime es una instancia/objeto de la clase datetime.datetime . El método now() devuelve un objeto que representa la fecha y la hora actuales.

Python

# importing datetime module
import datetime
 
# getting the datetime object
# of current date and time
print(datetime.datetime.now())

Producción:

2022-01-17 17:15:50.838373

Método 2 : Definir el objeto Datetime manualmente

También podemos declarar el objeto DateTime manualmente

Python

# importing datetime module
import datetime
 
# initialising the datetime object
obj = datetime.datetime(2001, 12, 9)
print(obj)

Producción:

2001-12-09 00:00:00

Después de esto, aprenderemos a formatear nuestros objetos Datetime.

Dar formato a objetos de fecha y hora

A veces necesitamos imprimir nuestros objetos de fecha y hora en diferentes formatos. Para estas operaciones, vamos a utilizar el método strftime() . La sintaxis de strftime() es:

Sintaxis : strftime (formato)

Python

# importing datetime object
import datetime
 
# initialising datetime object
obj = datetime.datetime(2001, 12, 9)
 
# Example 1
print(obj.strftime("%a %m %y"))
 
# Example 2
print(obj.strftime("%m-%d-%Y %T:%M%p"))

Producción:

Sun 12 01
12-09-2001 00:00:00:00AM

Podemos obtener diferentes atributos del objeto de fecha y hora. En el siguiente código, vamos a obtener las horas, los minutos y los segundos.

Python

# importing datetime object
import datetime
 
# initialising datetime object
obj = datetime.datetime(2001, 12, 9, 12, 11, 23)
 
# Hours
print(obj.hour)
 
# Minutes
print(obj.minute)
 
# Seconds
print(obj.second)

Producción:

12
11
23

También podemos obtener un objeto de fecha y hora utilizando el método strptime() , en el que obtenemos un objeto de fecha y hora de una string. Dado que las strings que usamos se pueden formatear de cualquier forma, debemos especificar el formato esperado. Para entender esto, veamos la sintaxis de strptime() :

Sintaxis : datetime.strptime(datos,formato_esperado)

Parámetros

  • data : Nuestra hora y fecha pasadas como una string en un formato particular
  • formato_esperado : el formato en el que se presentan los datos en el primer parámetro

Python

# importing datetime object
import datetime
 
# using strptime() method
print(datetime.datetime.strptime("Jan 1, 2013 12:30 PM",
                                 "%b %d, %Y %I:%M %p"))

Producción:

2013-01-01 12:30:00

Trabajar con zonas horarias

Los objetos DateTime con los que hemos estado trabajando hasta ahora son los que se conocen como objetos DateTime ingenuos. Un objeto DateTime ingenuo no tiene ninguna información sobre la zona horaria. Podemos verificar esto usando la propiedad tzinfo .

Python

# importing datetime object
import datetime
 
# defining the object
obj = datetime.datetime(2001, 11, 15, 1, 20, 25)
 
# checking timezone information
print(obj.tzinfo)

Producción:

None

Para configurar nuestras propias zonas horarias, debemos comenzar a usar el módulo pytz . En el siguiente ejemplo, primero crearemos un objeto DateTime y luego crearemos un objeto de zona horaria. Luego localizaremos ese objeto de zona horaria en el objeto DateTime y verificaremos la propiedad tzinfo.

Python

# importing datetime and pytz
import datetime
import pytz
 
# defining the object
obj = datetime.datetime(2001, 11, 15, 1, 20, 25)
 
# defining the timezone
tz = pytz.timezone('Asia/Kolkata')
 
# localising the datetime object
# to the timezone
aware_obj = tz.localize(obj)
 
# checking timezone information
print(aware_obj.tzinfo)

Salida

Asia/Kolkata

Conversión del objeto DateTime de una zona horaria a otra

Para convertir el objeto DateTime de una zona horaria a otra, necesitamos usar el método  astimezone() .

Sintaxis : DateTimeObject.astimezone(tz=Ninguno)

tz : la zona horaria especificada a la que se debe convertir DateTimeObject

Devuelve : una instancia de fecha y hora según el parámetro de zona horaria especificado tz

Python

# importing datetime and pytz
import datetime
import pytz
 
# defining the object and localising it to a timezone
obj = datetime.datetime(2001, 11, 15, 1, 20, 25)
tz = pytz.timezone('Asia/Kolkata')
obj = tz.localize(obj)
 
# Creating a new timezone
new_tz = pytz.timezone('America/New_York')
 
# Changing the timezone of our object
new_tz_time = obj.astimezone(new_tz)
 
# Printing out new time
print(new_tz_time)

Producción:

2001-11-14 14:50:25-05:00

Trabajando con la clase timedelta

Podemos verificar la diferencia entre dos objetos DateTime que están localizados en la misma zona horaria o son ingenuos. En el siguiente ejemplo, vamos a crear dos objetos DateTime localizados en la misma zona horaria y verificar su diferencia. La diferencia del tiempo devuelto debe ser un objeto de la clase timedelta.

Python

# importing datetime and pytz
import datetime
import pytz
 
# defining the objects
obj1 = datetime.datetime(2001, 11, 15, 1, 20, 25)
obj2 = datetime.datetime(2001, 6, 3, 2, 10, 12)
 
# Defining the timezone
tz = pytz.timezone('Asia/Kolkata')
 
# localising the objects to the timezone
obj1 = tz.localize(obj1)
obj2 = tz.localize(obj2)
 
# printing the differences
print(obj2-obj1)
print(obj1-obj2)
 
# Checking the object type of the
# difference returned
print(type(obj1-obj2))

Salida

-165 days, 0:49:47
164 days, 23:10:13
<class 'datetime.timedelta'>

No solo las diferencias, los objetos timedelta también se pueden usar para la suma. Si agregamos un objeto timedelta a un objeto datetime, obtenemos otro objeto datetime que tiene el timedelta factorizado como la diferencia con el primer objeto datetime. Veamos el ejemplo:

Python

# importing datetime and pytz
import datetime
import pytz
 
# defining the objects
obj = datetime.datetime(2001, 11, 15, 1, 20, 25)
 
# defining a timedelta
diff = datetime.timedelta(days=90, hours=1)
 
# getting a datetime object
# that is 90 days and 1 hour ahead
new_obj = obj+diff
 
# Our final answer
print(new_obj)

Producción: 

2002-02-13 02:20:25

Publicación traducida automáticamente

Artículo escrito por pranavhfs1 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 *