将unix时间戳更改为其他时区

时间:2011-07-15 12:16:20

标签: python datetime date timezone

我从Python程序中的Web服务检索unix时间戳。此时间戳位于美国时区。为了将其插入到MySQL数据库中与其他对象(在法国本地化),我想将此时间戳转换为法国时区。

我可以用数学函数来做,但是有夏令时的问题。我更喜欢使用Python时间和日期特定的函数来处理这些概念。

你有提示,我迷失在Python文档中吗?

3 个答案:

答案 0 :(得分:5)

如果它确实是一个unix时间戳,那么它是基于UTC的。只是为您的用例正确解释它。仅当您必须将此日期打印为文本时才应用时区翻译。

如果您将它作为时间戳存储在您身边,请保持原样。

答案 1 :(得分:5)

我过去遇到过类似的问题,我们从服务提供商下载的文件的时间戳有时间戳对应于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

答案 2 :(得分:1)

pytz可能会帮到你。就像viraptor所说的那样,理想情况下,您将所有日期时间存储为unix UTC时间戳,并且只将您打印出来的时间本地化。