Проблема
Недавно я столкнулся с новичкой на работе на работе, где мне пришлось написать метод утилиты, который получит временной метку и часовой пояс времени отметки и преобразует его в читаемую форму человека для часовой зоны UTC. Теперь это выглядело прямо, за исключением того, что я не работал с библиотекой DateTime раньше. Так что после многих поисков я наткнулся на очень полезное datetime.astimezone ()
Метод, который помог решить проблему.
О) метод
AstimeZone (TZ = Нет)
.. берет в datetime Объект и возвращает новый объект DateTime со временем, установленным в эквивалентное время в datetime.tzinfo атрибут TZ Отказ Если нет TZ Объект не указан, по умолчанию для UTC часовой пояс.
>>> from datetime import datetime >>> from pytz import timezone # Convert the local time in London to the local time in Sydney >>> datetime.now(timezone('Europe/London')).astimezone(timezone('Australia/Sydney')) datetime.datetime(2019, 10, 15, 22, 48, 4, 449019, tzinfo=) # Convert the time in London to it's equivalent in UTC >>> datetime.now(timezone('Europe/London')).astimezone() datetime.datetime(2019, 10, 15, 11, 54, 58, 952388, tzinfo=datetime.timezone(datetime.timedelta(0), 'UTC'))
Окончательное решение моей проблемы
Ниже приведено решение, которое я придумал, с помощью которого использовалось datetime.astimezone () Метод в библиотеке DateTime. Обратите внимание, что код был упрощен, чтобы дать читателю понять его легче.
from datetime import datetime from pytz import timezone def change_timezone_of_datetime_object(date_time_object, new_timezone_name): """Return the *date_time_object* with it's timezone changed to *new_timezone_name* :param date_time_object: The datetime object whose timezone is to be changed :type date_time_object: datetime :param new_timezone_name: The name of the timezone to which the *date_time_object* is to be changed to :type new_timezone_name: str :rtype: datetime """ # Create a pytz.timezone object for the new_timezone new_timezone_object = timezone(new_timezone_name) # Update the timezone of the datetime object date_time_object = date_time_object.astimezone(new_timezone_object) # Return the converted datetime object return date_time_object # Testing >>> dtobj = datetime.now(timezone('UTC')) >>> change_timezone_of_datetime_object(dtobj, 'Europe/London') datetime.datetime(2019, 10, 15, 13, 56, 30, 220369, tzinfo=)
использованная литература
- Документация библиотеки Python DateTime
- 10 вещей, которые нужно знать о дате и времени в Python с DateTime, Pytz, Dateutil & TimeDelta – Пример 4 оказался очень полезным. Спасибо @eeryoy Отказ
Оригинал: “https://dev.to/moijes12/converting-an-aware-datetime-object-from-one-timezone-to-another-in-python-173f”