Как преобразовать время API UTC в местное время (+13:00)

Я пытаюсь преобразовать время даты из API, который хранит значения времени в формате UTC. Мне нужно преобразовать время даты в мое местное время 'Pacific/Auckland'

API, который я использую, это Sunrise-Sunset https://sunrise-sunset.org/api

Конкретное место, которое я запрашиваю - Крайстчерч, Новая Зеландия https://sunrise-sunset.org/search?location=christchurch

import requests

api_url = 'https://api.sunrise-sunset.org/json?lat=-43.525650&lng=172.639847&formatted=0'
response = requests.get(api_url)

if response.status_code == 200:
    sunset_today = response.json()['results']['sunset']
    print(sunset_today) # outputs '2021-09-26T06:31:41+00:00'

Я много искал в StackOverflow и Google, но не могу найти решение, которое соответствует моим потребностям.

Я задаю вопрос

  1. How can I convert the UTC value to my local datetime ('Pacific/Auckland')?

FYI, я не хочу увеличивать объем приложения, но из предыдущих (неудачных) попыток решить эту проблему я уже установил пакеты tzlocal и pytz.

Я пишу свое приложение на Django 3.2.7 и настроил свой settings.py TIME_ZONE = 'Pacific/Auckland'

Edit. При попытке преобразовать строку в datetime я получаю следующую ошибку. данные времени '2021-09-26T06:31:41+00:00' не соответствуют формату '%Y-%m-%dT%H:%M:%S %Z'

sunset_today = response.json()['results']['sunset']
format = '%Y-%m-%dT%H:%M:%S %Z'
parsed_date = datetime.strptime(sunset_today, format)
print(parsed_date) 

# ERROR: time data '2021-09-26T06:31:41+00:00' does not match format '%Y-%m-%dT%H:%M:%S %Z'*

Для преобразования строки с указанием часового пояса в python datetime проще использовать fromisoformat, поскольку вы все равно получаете от API строку в формате ISO:

import datetime

sunset_today = response.json()['results']['sunset']
parsed_date = datetime.datetime.fromisoformat(sunset_today)
# 2021-09-26 06:31:41+00:00

Я решил проблему, используя библиотеки dateutil и pytz

import requests
import pytz
from dateutil import parser

api_url = 'https://api.sunrise-sunset.org/json?lat=-43.525650&lng=172.639847&formatted=0'
response = requests.get(api_url)

nz_zone = pytz.timezone('Pacific/Auckland')
        
if response.status_code == 200:
    sunset_today = response.json()['results']['sunset']
    converted_date = parser.parse(sunset_today).astimezone(nz_zone)
    print(converted_date) # outputs 2021-09-26 19:31:41+13:00
Вернуться на верх