Facebook API,时区和国家

3
我正在开发一个网站,用户可以使用他们的Facebook凭据登录。
现在我遇到了一个关于日期和时间的问题。我的本地系统使用“浪漫标准时间”,这与Facebook使用的不同。
在我的当地,我们使用夏令时,并根据一年中的时间可以处于UTC+1或UTC+2。
我的问题是,“如何将Facebook的时间转换为我本地系统将使用的格式,考虑到UTC + 1和UTC + 2之间的偶尔更改?”

你需要自己计算。虽然我可能错了(我不了解那个地区),但你想的UTC+1到UTC+2可能只是时间更改,而不是实际的时区。 - Tommy Crush
编辑以强调问题并进行一些常规清理。希望您不介意! - user1645826
即使处于相同的时区,不同国家可能会使用夏令时而另一些则不会。Tommy Crush - Androme
@DoomStone 请澄清一下,你是在处理Facebook的“事件”时间吗?如果是的话,你是否已经阅读了这个链接:点击这里 - Matt Johnson-Pint
@MattJohnson,不是的,这只是为了简化在我的网站上的注册流程,这样他们就可以自动填充表格中的数据。 - Androme
是的,我认为你不能依赖Facebook提供正确的时区ID。要么询问用户,要么使用类似jsTimeZoneDetect的工具进行猜测。 - Matt Johnson-Pint
2个回答

3
根据这份文档,用户更改时区的唯一方法是更改计算机的时区并重新登录Facebook。这让我相信他们只是在浏览器中使用JavaScript将UTC偏移量传递回服务器。

因此,从Facebook Graph API返回的timezone字段的值可能是用户上次登录时的偏移量。

也有可能它表示的是用户注册日期的偏移量,并且不能更改。我在文档中找不到任何参考资料,所以必须进行实验才能确定。

无论如何,仅凭偏移量无法推导出时区。有许多具有相同偏移量的时区。有关一个相关主题的有用类比,请参见我的答案这里


是的,我得出了相同的结论,但我想最好问一下,是否有人找到了解决方案! - Androme
尝试使用自己的Facebook账户,检查其值,将本地计算机的时钟更改为不同的时区,然后注销并重新登录Facebook。再次从API中检查该值,看看是否发生了变化。 - Matt Johnson-Pint

1
处理Facebook时间很困难。这是我的经验:
  • 如果你得到一个24个字符的ISO 8601时间戳,例如2013-01-17T08:00:00+0000,则与UTC的偏移量已定义。您只需要解析它并将其转换为本地偏移量。
  • 如果您获得Unix时间戳,例如1358694451,则它在PHP中定义为America/Los_Angeles时区。
  • 如果您获得19个字符或更少的ISO 8601时间戳,例如2013-01-172013-01-17T08:00:00,则该时间要么相对于具有该时间的对象的语言环境,要么(如果对象没有语言环境)则在America/Los_Angeles时区。

我不是C#开发人员,但这篇MSDN文章可能有助于转换时区。 http://msdn.microsoft.com/en-us/library/bb397769.aspx


第二个会相当奇怪,因为Unix时间戳仅基于UTC,并且从不根据时区进行调整。 - Matt Johnson-Pint

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接