这只是将时间戳解析为您提供的 tz(因此它假定 dt 是本地时间)。如果 dt 是绝对 / UTC 并且您想将其转换为本地时区,您需要先将其解析为 UTC 日期时间然后移动其时区:
datetime.fromtimestamp(timestamp, pytz.utc).astimezone(pytz.timezone('America/Sao_Paulo'))
例如使用1234567890:
>>> datetime.fromtimestamp(ts, pytz.utc)
datetime.datetime(2009, 2, 13, 23, 31, 30, tzinfo=<UTC>)
>>> datetime.fromtimestamp(ts, pytz.utc).astimezone(pytz.timezone('America/Sao_Paulo'))
datetime.datetime(2009, 2, 13, 21, 31, 30, tzinfo=<DstTzInfo 'America/Sao_Paulo' -02-1 day, 22:00:00 DST>)
还要注意,由于各种历史原因,正确使用 pytz 并不是那么简单 (e.g.)。如果您需要经常处理时区,您可能需要查看 pendulum,它试图使时区操作更可靠,并提供更友好的 API。