我从Python程序中的Web服务检索unix时间戳。此时间戳在美国时区。为了在法国本地化其他对象中将其插入MySQL数据库,我想将此时间戳转换为法国时区。将unix时间戳更改为不同的时区
我可以用数学函数做到这一点,但存在夏令时问题。我宁愿使用Python时间和日期特定的函数来处理这些概念。
您有提示,我迷失在Python文档中吗?
我从Python程序中的Web服务检索unix时间戳。此时间戳在美国时区。为了在法国本地化其他对象中将其插入MySQL数据库,我想将此时间戳转换为法国时区。将unix时间戳更改为不同的时区
我可以用数学函数做到这一点,但存在夏令时问题。我宁愿使用Python时间和日期特定的函数来处理这些概念。
您有提示,我迷失在Python文档中吗?
过去,当我们从服务提供商处下载的文件的时间戳具有与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
即使我的问题被错误地解释了(我没有找到确切的问题),你解决了它:) – iwalktheline
如果你可以测试任意日期,作为一个终极测试,我会建议测试发生了什么2011年11月3日。欧洲将有冬令时,而美国仍有夏令时(见http://www.worldtimezone.com/daylight.html) –
如果它确实是一个unix时间戳,那么它是基于UTC的。只是为你的用例正确解释它。仅在必须以文本形式打印此日期时应用时区翻译。
如果您也将它作为时间戳存储在您身边,请保持原样。
这不是一个“unix时间戳”,而是根据最初的太平洋时区1970年1月1日过去的秒数。这很丑陋,我知道,但它是Facebook API。我不能保留它,因为我有其他基于真正的“unix时间戳”的对象:UTC – iwalktheline
如果你知道它是太平洋时间,而不是变化,你可以添加8小时使其成为UTC,并用作unix时间戳。 – viraptor
事实上Facebook的api并没有考虑到法国的夏季是GMT + 2,春季是GMT + 1。所有数据均作为填充日期存储在数据库中,但在太平洋标准时区中。例如,我在facebook网站上创建一个事件2011-07-15 23:00。它存储为2011-07-15 23:00-0000(PST)。所有的问题都来自这里。 pytz解决了这个问题 – iwalktheline
pytz可能会帮助你在这里。就像viraptor说的,理想情况下,你会将所有的日期时间存储为unix UTC时间戳,并且只将本地化时打印出来。
零对应什么? 00:00:00 1970年1月1日PST或01:00:00 1970年1月1日PST? –
好问题,我头撞墙3小时...事实上,它接缝,它不是PST,但PDT。我有一个额外的时间(这导致我-7h,而不是 - 8H),但在法国,我们在夏季UTC + 2H和冬季+ 1H。我无法用数学函数弄清楚它。我可能需要pytz – iwalktheline
我的问题是不准确的,我错过了问题的根源。我打开另一个线程 – iwalktheline