【问题标题】:WAT timezone causing W3C validator to claim RSS is invalidWAT 时区导致 W3C 验证器声称 RSS 无效
【发布时间】:2013-11-10 17:39:30
【问题描述】:

我有一个用于事件信息的 XML 文件。尼日利亚阿布贾有一个条目。我所看到的一切都表明时区缩写是 WAT。但是,w3 feed validator 表示它无效。如果我用 CST 替换 WAT,它会验证。看来问题完全出在那个时区。

W3 提要验证器结果:

Sorry
This feed does not validate.
line 106, column 41: pubDate must be an RFC-822 date-time: Fri, 01 Nov 2013 16:00:00 WAT [help]
<pubDate>Fri, 01 Nov 2013 16:00:00 WAT</pubDate>

XML 代码:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:xxx="http://www.xxx.org/">
    <channel>
        <title>Upcoming Events</title>
        <link>http://www.xxx.org</link>
        <description></description>
        <atom:link href="http://www.xxx.org/rss/Events.xml" rel="self" type="application/rss+xml" />
        <item>
            <title>xxx</title>
            <xxx:host>Hosted by xxx</xxx:host>
            <xxx:speaker>Speaking: xxx</xxx:speaker>
            <dc:creator>xxx</dc:creator>
            <pubDate>Fri, 01 Nov 2013 16:00:00 WAT</pubDate>
            <xxx:extraDate1>Sat, 02 Nov 2013 16:00:00 WAT</xxx:extraDate1>
            <xxx:extraDate2>Sun, 03 Nov 2013 07:00:00 WAT</xxx:extraDate2>
            <xxx:endDate>Sun, 03 Nov 2013 15:00:00 WAT</xxx:endDate>
            <link>http://www.xxx.org</link>
            <xxx:venue>xxx</xxx:venue>
            <xxx:address>xxx</xxx:address>
            <xxx:location>xxx</xxx:location>
            <xxx:zip></xxx:zip>
            <xxx:phone>xxx</xxx:phone>
            <xxx:notes></xxx:notes>
        </item>
    </channel>
</rss>

为简洁起见,该 XML 已被编辑。我有多个美国时区,但这是第一个外国时区。

该文件适用于 RSS 阅读器,我有一个适用于它的 PHP 页面。问题是我正在使用一些 JavaScript,它抛出了一个无效的 XML 错误。

&lt;pubDate&gt; 真的有问题吗?我没看到,如果有的话。

【问题讨论】:

  • 点击错误消息中的链接 - 您将进入 rfc,其中列出了它理解的所有时区,但未列出 WAT

标签: xml rss timezone validation w3c


【解决方案1】:

规范很清楚:

http://asg.web.cmu.edu/rfc/rfc822.html#sec-5.1

 zone        =  "UT"  / "GMT"                ; Universal Time
                                             ; North American : UT
             /  "EST" / "EDT"                ;  Eastern:  - 5/ - 4
             /  "CST" / "CDT"                ;  Central:  - 6/ - 5
             /  "MST" / "MDT"                ;  Mountain: - 7/ - 6
             /  "PST" / "PDT"                ;  Pacific:  - 8/ - 7
             /  1ALPHA                       ; Military: Z = UT;
                                             ;  A:-1; (J not used)
                                             ;  M:-12; N:+1; Y:+12
             / ( ("+" / "-") 4DIGIT )        ; Local differential
                                             ;  hours+min. (HHMM)

您需要使用本地差分(在本例中为+0100

【讨论】:

  • 以 UTC 格式存储所有内容。它会让你的生活更轻松。与人交流时只需担心时区。
  • 好的...我昨天在规范中看到了。我点击了来自RSS spec page 的链接。我没有看到它只适用于那些时区。
  • @Thanatos 我过去曾考虑过这样做。我遇到的问题是,当我编写服务器端代码时,它会将其解释为服务器所在的时区。此外,JavaScript(我认为)将其解释为用户所在的时区。在这个特定的例子中,我希望用户看到实际的时间和时区指定(而不是那个时间的服务器或用户的变体)。不幸的是,使用偏移量并不能确定时区(是 +0100 WAT、BST、CET、IST 等)。尤其是当您考虑夏令时时,这可能很重要。
  • @doubleJ 处理日期和时区是一团糟。有像 github.com/mde/timezone-js 这样的库试图减轻痛苦,github.com/moment/moment 试图完全包装 Date
  • @doubleJ:IIRC,JS 支持与 UTC/local 之间的转换。 (但它无法确定用户在什么 TZ。)服务器端,不要依赖服务器的TZ。当然,这取决于语言,但有些提供了从/到 UTC 和任意 TZ 的轻松转换。
猜你喜欢
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
相关资源
最近更新 更多