当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Time.parse用法及代码示例


本文简要介绍ruby语言中 Time.parse 的用法。

用法

parse(date, now=self.now) { |year| ... }

采用 Time 的字符串表示并尝试使用启发式解析它。

此方法**不**用作验证器。如果输入字符串与有效格式不严格匹配,您可能会得到一个神秘的结果。应考虑尽可能使用“Time.strptime”而不是这种方法。

require 'time'

Time.parse("2010-10-31") #=> 2010-10-31 00:00:00 -0500

根据当前日期推断日期的任何缺失部分。

require 'time'

# assuming the current date is "2011-10-31"
Time.parse("12:00") #=> 2011-10-31 12:00:00 -0500

我们可以通过传递响应 mon day year 的第二个对象来更改用于推断缺失元素的日期,例如 Date Time DateTime 。我们也可以使用我们自己的对象。

require 'time'

class MyDate
  attr_reader :mon, :day, :year

  def initialize(mon, day, year)
    @mon, @day, @year = mon, day, year
  end
end

d  = Date.parse("2010-10-28")
t  = Time.parse("2010-10-29")
dt = DateTime.parse("2010-10-30")
md = MyDate.new(10,31,2010)

Time.parse("12:00", d)  #=> 2010-10-28 12:00:00 -0500
Time.parse("12:00", t)  #=> 2010-10-29 12:00:00 -0500
Time.parse("12:00", dt) #=> 2010-10-30 12:00:00 -0500
Time.parse("12:00", md) #=> 2010-10-31 12:00:00 -0500

如果给定一个块,则date中说明的年份由该块转换。这是专门为处理两位数年份而设计的。例如,如果您想将 70 之前的所有两位数年份视为 2000+ 年,您可以这样写:

require 'time'

Time.parse("01-10-31") {|year| year + (year < 70 ? 2000 : 1900)}
#=> 2001-10-31 00:00:00 -0500
Time.parse("70-10-31") {|year| year + (year < 70 ? 2000 : 1900)}
#=> 1970-10-31 00:00:00 -0500

如果给定时间的上部组件损坏或丢失,它们将与 now 的组件一起提供。对于较低的组件,如果损坏或丢失,则假定最小值(1 或 0)。例如:

require 'time'

# Suppose it is "Thu Nov 29 14:33:20 2001" now and
# your time zone is EST which is GMT-5.
now = Time.parse("Thu Nov 29 14:33:20 2001")
Time.parse("16:30", now)     #=> 2001-11-29 16:30:00 -0500
Time.parse("7/23", now)      #=> 2001-07-23 00:00:00 -0500
Time.parse("Aug 31", now)    #=> 2001-08-31 00:00:00 -0500
Time.parse("Aug 2000", now)  #=> 2000-08-01 00:00:00 -0500

由于世界各地本地定义的时区缩写之间存在许多冲突,因此此方法并非旨在理解所有这些。例如,缩写 “CST” 的使用方式多种多样:

-06:00 in America/Chicago,
-05:00 in America/Havana,
+08:00 in Asia/Harbin,
+09:30 in Australia/Darwin,
+10:30 in Australia/Adelaide,
etc.

基于这个事实,这个方法只理解 RFC 822 中说明的时区缩写和系统时区,按照命名的顺序。 (即 RFC 822 中的定义覆盖系统时区定义。)系统时区取自 Time.local(year, 1, 1).zoneTime.local(year, 7, 1).zone 。如果提取的时区缩写与其中任何一个都不匹配,则将其忽略,并将给定时间视为本地时间。

如果 Date ._parse 无法从 date 中提取信息,或者如果 Time 类不能表示指定的日期,则会引发 ArgumentError

此方法可以用作其他解析方法的fail-safe,如下所示:

Time.rfc2822(date) rescue Time.parse(date)
Time.httpdate(date) rescue Time.parse(date)
Time.xmlschema(date) rescue Time.parse(date)

不过,应该检查 Time.parse 的故障。

您必须要求 ‘time’ 才能使用此方法。

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Time.parse。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。