Time.iso8601
方法是ISO-8601的受限子集。
看起来没有一个类可以处理所有各种8601日期和日期/时间组合。但是,我设法通过使用Date.parse
和Time.iso8601
方法解决了这些问题。缺点是您需要在代码中决定输入是看起来像日期还是日期/时间。
Time.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支持的内容之间的差异。简短的回答是可能的格式数量受到限制。
答案 0 :(得分:15)
是的,但不幸的是它在Ruby 1.9中。
require "date"
Date.iso8601("2010-W32-5").strftime
#=> "2010-08-13"
我不相信Ruby 1.8.7有任何实现(或者至少我找不到任何实现)。您可以尝试升级到Ruby 1.9,从1.9.2开始它非常稳定。或者,您可以尝试自己解析日期。
答案 1 :(得分:10)
要将ISO8601日期转换为本地时区,请执行以下操作:
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。