本文簡要介紹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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。