将Unix时间戳转换为其他时区

8 投票
3 回答
9841 浏览
提问于 2025-04-16 21:36

我在一个Python程序中从一个网络服务获取了一个Unix时间戳。这个时间戳是美国时区的。为了把它和其他位于法国的对象一起插入到MySQL数据库中,我想把这个时间戳转换成法国的时区。

我可以用数学函数来做这个转换,但还有夏令时的问题。我更希望使用Python里专门处理时间和日期的函数,这样可以更好地处理这些概念。

你有什么建议吗?我在Python的文档里搞得一头雾水。

3 个回答

1

pytz 可能会对你有帮助。就像viraptor说的,最好是把所有的时间都存储为Unix UTC时间戳,只有在你要显示的时候再转换成当地时间。

8

如果它真的是一个Unix时间戳,那它是基于UTC时间的。你只需要根据自己的需求正确理解它。在你需要把这个日期显示成文字的时候,才需要进行时区转换。

如果你在自己这边也存储这个时间戳,就保持它原样,不用改动。

6

我之前也遇到过类似的问题,当我们从一个服务提供商那里下载的文件的时间戳是对应于太平洋标准时间(PST)的。下面的方法帮助我完成了时间转换:

import pytz, datetime, time
import os

originalTimeStamp = os.stat("/tmp/file-from-us-west-coast").st_mtime

# prints e.g. 2010-03-31 13:01:18
print "original:",datetime.datetime.fromtimestamp(originalTimeStamp)

# re-interpret 
originalTimeZone = "America/Los_Angeles"
targetTimeZone   = "Europe/Paris"

newTimeStamp = pytz.timezone(originalTimeZone).localize(datetime.datetime.fromtimestamp(originalTimeStamp)).astimezone(pytz.timezone(targetTimeZone))

# prints e.g. 2010-03-31 22:01:18+02:00
print "new:     ",newTimeStamp

# convert back to seconds since epoch
newTimeStamp = time.mktime(newTimeStamp.timetuple())

# print time difference in hours
print (newTimeStamp - originalTimeStamp) / 3600.0

撰写回答