本文简要介绍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).zone
和 Time.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 Time.gmtime用法及代码示例
- Ruby Time.at用法及代码示例
- Ruby Time.utc_offset用法及代码示例
- Ruby Time.isdst用法及代码示例
- Ruby Time.time + numeric用法及代码示例
- Ruby Time.wednesday?用法及代码示例
- Ruby Time.localtime用法及代码示例
- Ruby Time.yday用法及代码示例
- Ruby Time.time <=>用法及代码示例
- Ruby Time.month用法及代码示例
- Ruby Time.utc?用法及代码示例
- Ruby Time.new用法及代码示例
- Ruby Time.monday?用法及代码示例
- Ruby Time.getutc用法及代码示例
- Ruby Time.round用法及代码示例
- Ruby Time.dst?用法及代码示例
- Ruby Time.tv_nsec用法及代码示例
- Ruby Time.xmlschema用法及代码示例
- Ruby Time.gmt?用法及代码示例
- Ruby Time.to_r用法及代码示例
- Ruby Time.gmt_offset用法及代码示例
- Ruby Time.ceil用法及代码示例
- Ruby Time.thursday?用法及代码示例
- Ruby Time.floor用法及代码示例
- Ruby Time.utc用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Time.parse。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。