我从Python程序中的web服务检索unix时间戳。此时间戳位于美国时区。为了将它与其他对象一起插入MySQL数据库中,我想将这个时间戳转换为法国时区。
我可以用数学函数来做,但是有夏令时的问题。我更喜欢使用Python的时间和日期特定函数来处理这些概念。
你有没有提示,我在Python文档中迷路了?
如果它真的是unix时间戳,那么它是基于UTC的。只需根据您的用例正确地解释它。只有当必须将此日期打印为文本时,才应用时区转换。
如果你也把它作为时间戳存储在你这边,保持它的原样
我过去也遇到过类似的问题,当时我们从服务提供商下载的文件的时间戳对应于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
pytz可能对您有所帮助。正如viraptor所说,理想情况下,您应该将所有日期时间存储为unix UTC时间戳,并且仅在打印出来时将时间本地化。