Часто локальні сервіси віддають час у локальній часовій зоні.
Розглядатимо приклад часової зони Києва +03:00.
Сервіс віддає там час у такому вигляді
2023-09-17 14:37:27
який насправді мав би мати вигляд
2023-09-17 14:37:27+03:00
Ну а для запису в БД нам потрібен час в нуловій часовій зоні і без інфо про часову зону, тобто
2023-09-17 11:37:27
Тепер розглянемо як виправити це непорозуміння за допомогою коду та пакету pytz
1. Отримаємо потрібну нам часову зону
tz = pytz.timezone('Europe/Kyiv')
можливий варіант
tz = pytz.timezone('Europe/Kiev')
2. Додамо нашу таймозону в дату за допомогою функції localize
ctime = tz.localize(ctime)
2023-09-17 14:37:27+03:00
3. Скоригуємо час в нулову таймзону за допомогою функції astimezone
ctime = ctime.astimezone(pytz.timezone('GMT'))
2023-09-17 11:37:27+00:00
4. Повернемо час у формат без таймзони
ctime = ctime.replace(tzinfo=None)
2023-09-17 11:37:27
Повний текст прикладу
import pytz
from datetime import datetime
ctime = datetime.strptime('2023-09-17 14:37:27', '%Y-%m-%d %H:%M:%S')
print(ctime)
tz = pytz.timezone('Europe/Kyiv')
ctime = tz.localize(ctime)
print(ctime)
ctime = ctime.astimezone(pytz.timezone('GMT'))
print(ctime)
ctime = ctime.replace(tzinfo=None)
print(ctime)