Рубрики
Без рубрики

Преобразование объекта Aware DateTime из одного часового пояса на другой в Python

Проблема, которую я недавно столкнулся с новичкой на работе, где мне пришлось написать полезность … Помечено Python, DateTime, Pytz.

Проблема

Недавно я столкнулся с новичкой на работе на работе, где мне пришлось написать метод утилиты, который получит временной метку и часовой пояс времени отметки и преобразует его в читаемую форму человека для часовой зоны 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=)

использованная литература

Оригинал: “https://dev.to/moijes12/converting-an-aware-datetime-object-from-one-timezone-to-another-in-python-173f”