将PST/PDT(Facebook时间戳)转换为UTC
Facebook的API(使用FQL)给出的时间戳是基于太平洋时区的。这些时间戳表示自1970年1月1日以来的秒数。我在法国,法国的夏季时间是GMT+2,冬季时间是GMT+1。这种“夏令时变化”在所有基于本地的日期时间函数中都处理得很好。
正如你已经发现的,我试图将Facebook返回的时间戳转换为法国时间。今天我发现,Facebook给我的时间戳是1310788800,这对应于我在法国时间显示的7月15日星期五21:00。Facebook说明他们的时区是PST(GMT-8小时)。而1310788800在UTC时间下是7月15日星期五20:00,这在法国时间是22:00。
所以这里多出一个小时,这让我得出以下结论:
- 要么Facebook不是基于PST,而是基于PDT(考虑到所有日期的夏令时变化——这似乎不太现实)
- 要么Facebook网站和数据库没有考虑法国的夏令时变化
- 这两种情况都意味着Facebook的API对于远离他们服务器的人来说使用起来非常困难,而且Facebook的时间管理代码写得很糟糕
不管怎样,问题是一样的。我想在冬季和夏季都能转换这个日期。为此,我必须将这个时间视为基于PDT,并将其转换为UTC时间。
你有什么建议可以用Python将PDT转换为UTC吗?
谢谢你的帮助!
2 个回答
1
要在Python中把PDT时间转换成UTC时间,可以使用pytz这个库。
不过,Facebook的API似乎更复杂一些。你可以看看这个链接,了解如何把UTC时间转换成Facebook所需要的格式:Facebook活动和时区,如何将UTC日期时间转换为Facebook所期望的格式?
2
我需要使用 pytz
from datetime import *
from pytz import timezone
import pytz
[...]
if (not isinstance(pacificTime, int)):
pacificTime = int(pacificTime)
originalTimeZone = "America/Los_Angeles"
print datetime.fromtimestamp(pacificTime, pytz.timezone(originalTimeZone))
这个解决方案来自我之前的帖子:将Unix时间戳转换为不同的时区
希望这能帮到你