代码之家  ›  专栏  ›  技术社区  ›  Chris McCauley

Ruby的ISO-8601日期解析有完整的实现吗?

  •  19
  • Chris McCauley  · 技术社区  · 14 年前

    这个 Time.iso8601

    • 它的局限性是什么?
    • 有人知道Ruby的完整实现吗?我用的是核磁共振1.8.7。

    更新

    Date.parse 时间.iso8601 方法。缺点是您需要在代码中决定输入看起来是日期还是日期/时间。

    时间.iso8601 Time.parse

    >> Time.parse("2010-09-06T12:27:00.10-05:00")
    => Mon Sep 06 18:27:00 +0100 2010
    
    >> Time.iso8601("2010-09-06T12:27:00.10-05:00")
    => Mon Sep 06 17:27:00 UTC 2010
    

    This document 触及ISO-8601和Ruby支持的内容之间的差异。简而言之,可能的格式数量是有限的。

    2 回复  |  直到 12 年前
        1
  •  17
  •   molf    14 年前

    是的,但不幸的是它是在Ruby 1.9中。

    require "date"
    
    Date.iso8601("2010-W32-5").strftime
    #=> "2010-08-13" 
    

    我不相信Ruby1.8.7有任何实现(或者至少我找不到任何实现)。您可以尝试升级到Ruby1.9,它在1.9.2中非常稳定。或者,您可以尝试自己解析日期。

        2
  •  12
  •   lulalala    4 年前

    require "time"
    dt1 = Time.parse("2010-09-06T12:27:00.10-05:00")
    

    要将ISO8601日期转换为UTC,请执行以下操作:

    dt2 = Time.iso8601("2010-09-06T12:27:00.10-05:00")
    

    如果比较上述查询返回的日期,它们将是相同的(即dt1===dt2)。但是,访问日期组件(如年、月、日、小时等)将返回适合时区的值(UTC或本地)。strftime也是如此。