测试twitter的API时,在它返回的用户信息里,关于用户时区的信息有两个
28800
Beijing
我希望利用这两个数值,得到用户的的DateTimeZone,直接new DateTimeZone(’Beijing’)是不行的,我看了PHP的API,时区里是没有“Beijing”的,中国的时区应该是“Asia/Shanghai”,看来这个“Beijing”只是用来显示的,我又查了DateTimeZone的API,里面也没有根据UTC Offset值取得DateTimeZone的方法,看来不能通过这样的方法来做了。
utc_offset这个值是应该表示与UTC标准时间相差的秒数,测试下面的代码
$datetimezone = new DateTimeZone(’Asia/Shanghai’);
$datetime = new DateTime(”now”,$datetimezone);
echo $datetime->getOffset();
结果显示28800,没错,时区“Asia/Shanghai”与UTC的时间差是28800秒,也就是8个小时(我们在东8区)。
在PHP中使用time()或是DateTime对象,在不指定DateTimeZone时,其默认的DateTimeZone就是UTC,产生的时间就是UTC时间,把这个时间加上Offset值之后,就可以显示出本时区的正确时间了,比如下面的代码
$datetime = time();
echo date(”y-m-d H:i:s”,$datetime);
echo “
”;
$datetime = $datetime + 28800;
echo date(”y-m-d H:i:s”,$datetime);
输入的结果是
09-05-13 04:21:44
09-05-13 12:21:44
上面是UTC的时间,而下面的是北京时间。
在我们设计数据的时候,时间字段设计为长整数字段比较方便,存放UTC的time()的Unix时间戳,用户可以自己定义所在的时区,通过Offset,最终显示给用户其时区的时间。我感觉Java里的TimeZone似乎要更灵活一些,可以这样TimeZone.getTimeZone(”GMT+08:00″)
另外:在PHP里取得所有可用时区的方法是DateTimeZone::listIdentifiers()。