Facebook活动和时区,如何将UTC日期时间转换为Facebook所需格式?
我的应用需要创建 Facebook 活动。一切都正常,但我无法正确设置时区。开始和结束的日期都不对。Facebook 的活动 API 文档上说:
注意:start_time 和 end_time 是活动创建者输入的时间,假设这些时间是太平洋时间(根据活动日期可能是夏令时或标准时间),然后转换成 UTC,最后再转换成 Unix 时间戳。
我搞不懂这是什么意思。
我的网页应用是用 Python(Django)做的。给定一个 datetime
对象,它的开始和结束时间是 UTC 的,我该怎么用 pytz
的方法来得到正确的时间,以便发送给 Facebook 呢?
2 个回答
2
这段话的意思是,如果用户输入“12 am”,你需要假设这是“太平洋时间的12点”,然后把这个时间转换成协调世界时(UTC),也就是“格林威治标准时间的8点”,最后再把这个时间转换成Unix时间戳。
你可以这样做:
import datetime, calendar
date_local = datetime.datetime.now() # some date in some timezone
date_utc = date_local.utctimetuple()
unix_time = calendar.timegm(date_utc) # to unix time
1
“Unix时间戳”简单来说就是“从1970年1月1日开始的秒数(不算闰秒)”。
顺便提一下,那个Facebook事件API的描述真让人费解,我简直不敢相信它说的就是这样。他们似乎想要的是:
- 事件创建者输入的时间;
- 把这个时间当作太平洋时区的本地时间,并且考虑到这个时区的夏令时规则;
- 然后转换成协调世界时(UTC)。
我住在UTC+0时区。所以如果我在2010年11月9日12:00:00 UTC安排一个活动,实际上提交给Facebook的时间是(对应的Unix时间)2010年11月9日20:00:00 UTC。这怎么可能是对的呢?也许我理解错了。