Facebook活动和时区,如何将UTC日期时间转换为Facebook所需格式?

2 投票
2 回答
7417 浏览
提问于 2025-04-16 06:47

我的应用需要创建 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的描述真让人费解,我简直不敢相信它说的就是这样。他们似乎想要的是:

  1. 事件创建者输入的时间;
  2. 把这个时间当作太平洋时区的本地时间,并且考虑到这个时区的夏令时规则;
  3. 然后转换成协调世界时(UTC)。

我住在UTC+0时区。所以如果我在2010年11月9日12:00:00 UTC安排一个活动,实际上提交给Facebook的时间是(对应的Unix时间)2010年11月9日20:00:00 UTC。这怎么可能是对的呢?也许我理解错了。

撰写回答