我正在开发一个网站,用户可以用他们的Facebook凭据登录。
现在我面临一个日期和时间的问题。我的本地系统使用的是"浪漫标准时间",这与Facebook使用的不同。
我所在的地方使用夏令时,根据一年中的时间,我们可以在UTC + 1或UTC + 2。
我的问题是,"考虑到UTC+1和UTC+2之间的偶尔变化,我如何将Facebook时间转换成我的本地系统将使用的格式?"
根据本文档,用户更改其时区的唯一方法是更改其计算机的时区,然后注销并重新登录到Facebook。这将使我相信他们只是在浏览器中使用JavaScript从UTC获取偏移量并将其传递回服务器。
因此,从Facebook Graph API返回的timezone
字段的值可能是用户上次登录时的偏移量。
也有可能它代表用户注册日期的偏移量,并且它不能更改。我在文档中找不到任何参考资料,所以必须通过实验来确定。
无论哪种情况,都不能仅从偏移量推导出时区。有许多时区具有相同的偏移量。要获得一个有用的类比,请参阅我在这里对相关主题的回答。
应对Facebook时代是困难的。以下是我的经验:
- 如果您得到一个24个字符的ISO 8601时间戳,如
2013-01-17T08:00:00+0000
,则定义了与UTC的偏移量。您只需要解析它并将其转换为本地偏移量。 - 如果您得到一个Unix时间戳,如
1358694451
,它在PHP中定义为America/Los_Angeles
的时区。 - 如果您获得的ISO 8601时间戳为19个字符或更少,如
2013-01-17
或2013-01-17T08:00:00
,则时间相对于具有该时间的对象的区域设置,或如果对象没有区域设置,则它位于America/Los_Angeles
时区。
我不是c#开发人员,但这篇MSDN文章可能对转换时区有所帮助。http://msdn.microsoft.com/en-us/library/bb397769.aspx