我有一个验证时间戳的程序,但是现在它使用正则表达式验证它们。我想知道的是,如果有一种更简单的方法可以按以下格式验证时间戳:05/03/2016 05:34:54 AM
或PM
。
程序的方法如下:
class TimeStampFormatError < StandardError; end
def verify_timestamp(stamp)
begin
if !(stamp[/^\d{1,2}\/\d{1,2}\/\d{4} \d{1,2}:\d{1,2}:\d{1,2} [AP]M\z/])
puts 'Invalid format of timestamp example: 06/07/2016 5:30:23 AM'
raise TimeStampFormatError
else
stamp
end
rescue TimeStampFormatError
puts 'Invalid Timestamp format'
get_timestamp
end
end
def get_timestamp
print 'Enter timestamp: '
tm = gets.chomp
verify_timestamp(tm)
end
答案 0 :(得分:1)
您可以使用适当格式的DateTime.strptime
。如果它以ArgumentError
失败,则输入日期字符串与指定的格式不匹配。
require 'date'
begin
print DateTime.strptime('05/03/2016 05:34:54 AM', '%d/%m/%Y %I:%M:%S %p')
rescue ArgumentError
print 'not ok'
end
一些测试:
$ ruby -e "require 'date'; begin; print DateTime.strptime('05/03/2016 05:34:54 AM', '%d/%m/%Y %I:%M:%S %p'); rescue ArgumentError; print 'not ok'; end"
2016-03-05T05:34:54+00:00
另一个(M
上缺少AM
):
$ ruby -e "require 'date'; begin; print DateTime.strptime('05/03/2016 05:34:54 A', '%d/%m/%Y %I:%M:%S %p'); rescue ArgumentError; print 'not ok'; end"
not ok