更简单的验证时间戳的方法

时间:2016-08-02 18:45:01

标签: ruby regex

我有一个验证时间戳的程序,但是现在它使用正则表达式验证它们。我想知道的是,如果有一种更简单的方法可以按以下格式验证时间戳:05/03/2016 05:34:54 AMPM

程序的方法如下:

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

1 个答案:

答案 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