2012-01-18 41 views
6

我想檢查在紅寶石中輸入日期的iso8601格式,如start_date =「2011/05/05」應該匹配格式爲2011-05-05T00:00:00-04:00並且相應地返回錯誤。 我們應該在這裏使用正則表達式還是存在任何方法?如何在ruby中匹配YYYY-MM-DDThh:mm:ssTZD時區格式

+0

澄清...如果我提供text =「2011-02-30T00:00:00」parsed = Time.iso8601(text)given => Wed Mar 02 00:00:00 +0000 2011,調整日期,我們可以避免這種情況,並拋出errors.Hill我去自定義驗證或它是可用的,也Time.iso8601(文本)崩潰的應用程序時提供無效的日期,我們可以只匹配後返回布爾值... – Bijendra 2012-01-18 13:12:10

回答

8

聽起來像是你想Time.iso8601

require 'time' 
iso = Time.iso8601(start_date) 

更多信息請參見this blog post

編輯:這裏是一個簡短但完整的測試程序,它的工作原理:

require 'time' 
text = "2011-05-05T00:00:00-04:00" 
parsed = Time.iso8601(text) 
puts parsed 

輸出:

Thu May 05 04:00:00 UTC 2011 
+0

'Time.iso8601 '不會將字符串作爲參數(應該是日期或時間對象)。 – steenslag 2012-01-18 11:46:43

+0

@steenslag:是的......編輯包含測試程序。 – 2012-01-18 11:57:13

+0

你是對的... – steenslag 2012-01-18 12:02:56

3

對於正則表達式驗證(使用可選微秒和時區)使用方法:

^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])T(2[0-3]|[0-1][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?(Z|[+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])?$ 

測試日期: http://rubular.com/r/qFFrhzvdsS

性能問題時不推薦在腳本中使用