我正在与Django + DRF合作,开发REST。我已经将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-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,并执行减法。但我想知道是否有一个更直接和正确的way.These时间戳直接发送给用户,必须容易阅读。
发布于 2022-06-30 14:55:37
会是这样的:
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)https://stackoverflow.com/questions/72817305
复制相似问题