如何匹配ruby中的YYYY-MM-DDThh:mm:ssTZD时区格式

时间:2012-01-18 11:23:20

标签: ruby-on-rails ruby ruby-on-rails-3

我想检查iso8601格式中输入的ruby日期,例如 start_date =“2011/05/05”应匹配格式 2011-05-05T00: 00:00-04:00 ,相应地返回错误。 我们应该在这里使用正则表达式还是存在任何方法?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

对于正则表达式验证(使用可选的微秒和时区),请使用:

^(-?(?:[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

当性能很重要时,不建议在脚本中使用