Quais são as diferenças entre a biblioteca pytz e o módulo datetime em Python?
sobes.tech IA
Resposta da IA
O módulo datetime fornece tipos básicos para trabalhar com datas e horas, mas o seu suporte para fusos horários é limitado. Pode criar objetos com informações de fuso horário (objetos conscientes do fuso horário), mas não contém uma base de dados de fusos horários nem regras de mudança para horário de verão.
A biblioteca pytz (o padrão de facto para trabalhar com fusos horários em Python) oferece uma extensa base de dados de fusos horários (que implementa a especificação IANA Time Zone Database). Permite converter corretamente a hora entre diferentes fusos horários, considerando mudanças históricas e regras de horário de verão.
Principais diferenças:
- Base de dados de fusos horários:
pytztem uma base de dados incorporada,datetime(na biblioteca padrão) não. - Criação de objetos conscientes do fuso horário: Com
pytz, isso faz-se atribuindo um objeto de fuso horário ao campotzinfode um objetodatetime. Emdatetime, pode-se especificartzinfo, mas sem uma base de dados, isso é pouco útil para fusos horários reais com mudanças de horário. - Gestão de mudanças para horário de verão:
pytzgere corretamente as mudanças históricas e as alterações nos fusos horários.datetimenão. - Localização:
pytzé necessário para obter a hora local correta para um fuso horário dado.
Exemplo de criação de um objeto datetime considerando o fuso horário com pytz:
import datetime
import pytz
# Obtemos o objeto de fuso horário para Nova Iorque
ny_tz = pytz.timezone('America/New_York')
# Criamos um objeto datetime naive
naive_dt = datetime.datetime(2023, 10, 27, 12, 0, 0)
# Convertendo o datetime naive para um objeto aware para Nova Iorque
aware_dt_ny = ny_tz.localize(naive_dt)
# Convertendo para outro fuso horário (por exemplo, UTC)
aware_dt_utc = aware_dt_ny.astimezone(pytz.utc)
# Mostramos os resultados
print(f"Naive datetime: {naive_dt}")
print(f"Datetime aware de Nova York: {aware_dt_ny}")
print(f"Datetime aware em UTC: {aware_dt_utc}")