我有一个方法来解析一个字符串到一个日期,但我想验证我不尝试解析一个非数字字符串或一个字符串哪个剂量代表日期或时间格式?
这怎么可以?
现在我有:
if(string=~ /^\D*$/ ) { return false else do something_else }
这是非常数字的字符串,如“未知”,但不适用于“UNKNOWN1”
任何想法,我可以用来确保只有日期或时间格式被解析?
解决方法
DateTime.strptime v ParseDate.parsedate
没有双关语,但是这里的信息现在已经过时了(2015年),并且一些方法和模块已经从Ruby 2.x中删除我在这里离开,以防万一有人仍在使用1.8.7
好的,也许这里有一个小双关
您会认为您可以使用Date.parse或DateTime.parse来检查是否有错误的日期(有关Date.parse here的更多信息)
d = Date.parse(string) rescue nil if d do_something else return false end
因为错误的值抛出一个可以捕获的异常.但是,测试字符串建议实际返回DateParse的Date
例如 ..
~\> irb >> Date.parse '12-UNKN/34/OWN1' => #<Date: 4910841/2,2299161> >>
Date.parse只是不够聪明地做这个工作:-(
ParseDate.parsedate做得更好.您可以看到它尝试解析日期,但在测试示例中,找不到有效的年份或月份.更多信息here
>> require 'parsedate' => true >> ParseDate.parsedate '2010-09-09' => [2010,9,nil,nil] >> ParseDate.parsedate 'dsadasd' => [nil,nil] >> ParseDate.parsedate '12-UNKN/34/OWN1' => [nil,12,nil]