使用pytz将已知时区转换为本地时间

4

我接收到一个特定时区的日期,需要将其转换为本地计算机的时区,但我不知道本地时区是什么。如何使用pytz(而不是 dateutil)进行此操作?我找到了许多使用dateutil的解决方案,例如此答案,但我找不到pytz中类似的函数。


不幸的是,你在pytz中找不到类似的函数的原因是它不存在。pytz要求你命名时区,以便可以查找它。 - Mark Ransom
1个回答

1
您可以通过 (UTC) Unix 时间戳进行转换:
foreign_naive = datetime.datetime(2012, 3, 11, 6, 0, 0)
foreign_timezone = 'US/Eastern'
foreign_dt = pytz.timezone(foreign_timezone).localize(foreign_naive)
timestamp = time.mktime(foreign_dt).astimezone(pytz.utc).timetuple()
local_dt = datetime.datetime.fromtimestamp(timestamp)

这里使用了Python创建未来五分钟的Unix时间戳的解决方案。

请注意,这并不会告诉您本地时区是什么,但您可以使用以下方法找出该时间相对于UTC的偏移量:

(local_dt - datetime.datetime.utcfromtimestamp(timestamp)).seconds

知道当前与UTC的偏移量在使用夏令时的任何时区都没有用。 - Mark Ransom
@MarkRansom 这不是问题;将 datetime.datetime.fromtimestampdatetime.datetime.utcfromtimestamp 进行比较,可以得到在 timestamp 处的偏移量。 - ecatmur
原始问题说明本地机器的时区未知。 - Mark Ransom
@MarkRansom没错,而且您无需知道本地计算机的时区即可使用datetime.datetime.fromtimestamp - ecatmur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接