Python Django преобразование временной метки из UTC в местный часовой пояс

Я работаю с Django + DRF, чтобы разработать REST API. Я настроил параметры django для работы с поддержкой часовых поясов на:

USE_I18N = True
USE_L10N = True
USE_TZ = True

Как уже говорилось ранее, моя база данных получает и хранит данные в UTC. Моя проблема заключается в том, что для некоторых пользователей (каждый пользователь имеет свою конфигурацию) я должен возвращать ответы в их часовом поясе (обычно в UTC-3 или UTC-2). Я читал несколько постов и пробовал несколько комбинаций: astimezone и normalize безрезультатно. Я прилагаю свои попытки:

timezone_arg = pytz.timezone('America/Buenos_Aires')
print(ts_a, ts_b)
ts_a = ts_a.astimezone(timezone_arg) 
ts_b = ts_b.astimezone(timezone_arg) 
print(ts_a, ts_b)

utc = pytz.timezone('UTC')
ts_a = timezone_arg.normalize(ts_a.astimezone(utc))
ts_b = timezone_arg.normalize(ts_b.astimezone(utc))
print(ts_a, ts_b)

Я получаю следующее:

2022-06-17 05:39:09 2022-06-17 05:46:49
2022-06-17 05:39:09-03:00 2022-06-17 05:46:49-03:00
2022-06-17 05:39:09-03:00 2022-06-17 05:46:49-03:00

Я понимаю, что django интерпретирует то, что я говорю ему, что временные метки уже находятся в UTC-3... и он нормализует их к UTC. Но что я хочу, так это преобразовать время из UTC в UTC-3. Мои входные/выходные данные должны быть такими:

2022-06-17 05:39:09 2022-06-17 05:46:49
2022-06-17 02:39:09 2022-06-17 02:46:49

Поскольку я работаю не только с часовым поясом Аргентины (UTC-3), я не могу вычислить временную дельту в 3 часа... разница может быть другой для других клиентов. Моим последним ресурсом было бы использование -03:00:00 в конце нормализованных временных меток и вычитание. Но я хотел бы знать, есть ли более прямой и правильный способ. Эти временные метки отправляются непосредственно пользователям и должны быть легко читаемы.

Это было бы что-то вроде этого

from datetime import datetime
from dateutil import tz

from_zone = tz.tzutc()
to_zone = tz.tzlocal()

utc = datetime.strptime('2022-06-17 05:39:09', '%Y-%m-%d %H:%M:%S')

utc = utc.replace(tzinfo=from_zone)

# Convert to local time zone
to_local_time = utc.astimezone(to_zone)

print(utc,to_local_time)
Вернуться на верх