布罗特的Blog

WordPress Feed中时间的问题

我发现Wordpress的Feed中文章发表时间有点问题,Outlook 2007的时间都是正确的,采用北京时间,符合习惯。但是用IE,Safari,FeedDemon打开Feed订阅就有问题,有3种结果。因为没找到Google Reader,鲜果里显示文章时间的功能,所以没有去看。Google了很多,也没找到答案。nnRSS Read in Outlokk 2007nn以上面图中的“对Wordpress的几点优化”为例,我是在北京时间2008/01/10 星期四晚上23:00:52发表的,GMT时间就是2008/01/10 15:00:52。但是除了上面的Outlook 2007时间正确之外,其他的全部都有相差。说明一下背景,空间是跟人合租Hostmonster的,服务器在美国,Wordpress已经设置了语言为中文,后台选项常规中已经设置了时区为+8。没有修改程序中跟feed有关的文件。nn首先,直接用IE打开http://www.bunorte.cn/feed,显示出源代码,发表时间变成了2008/01/10 15:00:52,早了8小时。nblog_rss_ie6.gifnn接下来测试Safari,它自带的RSS功能直接读出了内容,发表时间跟IE一样,也是2008/01/10 15:00:52。nblog_rss_safari.gifnn试用一下最近开始免费的FeedDemon,时间更离谱,变成了2008/01/11 星期五07:00,晚了8小时。nblog_rss_feeddemon.gifnn最后测试一下新版的Bloglines,发现它的时间是正确的,2008/01/10 11:00 PM 北京时间。nblog_rss_bloglines.gifnn这个问题可能跟不同的工具对时间的阅读有不同的方式,从feed源代码来看,wordpress使用+0000,跟时区设置无关;不同的阅读器都使用自己的计算方法得出结果,所以才会出现我说的有3种时间。根据车东说的WordPress的中文RSS FEED日期问题,标准的日期必须为rfc 822格式,类似于<pubDate>Sun, 26 Dec 2004 21:48:09 +0800</pubDate>。wordpress的默认feed没有遵守标准,所以就出现了时间错乱的Bug。实际上这个Bug从1.5之前就存在,但是现在还是没有改掉。我先找到这篇文章,于是改了wp-includes/feed-rss2.php,把+0000改成+0800,改了之后,IE显示的源代码里的还是GMT时间,不是发表日志的北京时间。Safari里早了16小时,FeedDemon变正确了,Bloglines还是保持正确,Outlook 2007里早了8小时。后来又看到这篇文章,不知道说的是什么道理,真是让人搞不明白。n

最终结果:Wordpress程序没有错!

n我恢复了原版feed-rss2.php,然后编辑了文章,并且手动Ping Feedsky,从更新状态看到feedsky已经更新,这时http://feed.bunorte.cn页面里的时间已经是符合标准的正确北京时间;用Google Reader订阅http://www.bunorte.cn/feed也看到今天的2篇日志时间是正确北京时间(原来Google Reader里昨天之前的feed就只显示日期);Outlook 2007里时间正确,Bloglines(目前版本和Beta版本)时间正确,FeedDemon和Safari早8小时,IE里时间不正确,在我看来,Wordpress本身没有错,是IE,Safari里无法正确的进行时间转换,而FeedDemon还要继续加油,我对它的客户端与在线服务同步还有点兴趣。

2 Comments

Freeman wrote at 12:05 下午 - 15th 一月 2008 Permalink

WordPress中RSS的时间是以GMT +0000为标准记录的,所以时间标准是没有问题的,但不过一些浏览器或RSS阅读器无法将它转化成当地时间而已

bunorte wrote at 13:48 下午 - 15th 一月 2008 Permalink

的确如此,我也发现了,是有些阅读器无法进行正确的时间转换。不过GMT +0000好像不符合rfc 822格式。理论上feed源码中用+0800才好。

Post a Comment

Required fields are marked *