【问题标题】:How do I convert a Rails DateTime object to an XML string?如何将 Rails DateTime 对象转换为 XML 字符串?
【发布时间】:2010-11-11 00:50:46
【问题描述】:

我在 Rails 中有一个 DateTime 对象,它在调用时输出如下:

ruby-1.8.7-p302 > Time.now
 => Wed Nov 10 16:46:51 -0800 2010 

如何将 DateObject 转换为返回 XML 日期时间类型的字符串,如下所示:

ruby-1.8.7-p302 > Time.now.convert_to_xml
 => 2010-11-10T16:46:51-08:00

【问题讨论】:

    标签: ruby-on-rails xml datetime


    【解决方案1】:

    时间到 XML 格式:

    Time.now.xmlschema # implemented by Rails, not stock ruby
    Time.now.strftime '%Y-%m-%dT%H:%M:%S%z'
    

    http://corelib.rubyonrails.org/classes/Time.html#M000281

    解析(Ruby 1.9 及更高版本):

    t = Time.now.xmlschema(str)
    

    http://ruby-doc.org/core-1.9/classes/Time.html#M000329

    【讨论】:

    • 看起来 Time.now.xmlschema 也适用于 Ruby 1.8.7。谢谢!
    • @GeekActive,别忘了将此答案标记为已接受。 =)
    • 看起来Time.xmlschema 是Rails 对Time 类的扩展。这不是股票红宝石。我更新了答案。
    • 带有strftime的方法虽然比较冗长,但是对于一些xml应用来说是需要的。例如,epub 3 最后需要 Z 而不是数字时区。
    • Rails 版本不正确。 XML 规范是 xs:dateTime 并且必须是 UTC,没有时区信息。 Loading development environment (Rails 3.2.3) 1.9.3-p125 :001 > Time.now.xmlschema => "2013-05-11T00:44:23+02:00" "xs:dateTime,内置于 W3C XML Schema 数据类型规范 [Schema2],必须以 UTC 形式表示,没有时区成分。"
    【解决方案2】:

    试试Time.now.iso8601

    【讨论】:

    • 这个答案也很简洁!
    • "xs:dateTime,内置于 W3C XML Schema 数据类型规范 [Schema2],必须以 UTC 形式表示,没有时区成分。"
    【解决方案3】:

    这是一种纯 Ruby 方式:

    Time.now.strftime("%Y-%m-%dT%H:%M:%S%z")
    

    您可以通过以下方式获取有关各种 strftime 选项的更多详细信息:

    ri Time.strftime
    

    【讨论】:

      【解决方案4】:

      使用strftime 方法

      Time.now.strftime("your format string")
      

      【讨论】:

      • to_s 不会转换为 xml。我只是得到与Time.now 相同的回复,但在引号"Wed Nov 10 16:46:51 -0800 2010"
      猜你喜欢
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 2021-03-31
      • 2012-07-11
      • 2011-03-12
      相关资源
      最近更新 更多