2016-08-02 117 views
1

我有一個程序,驗證時間戳,但現在它使用正則表達式來驗證它們。我想知道的是,是否有更簡單的方式來驗證以下格式的時間戳: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

您可以使用[DateTime.strptime(HTTP://紅寶石文檔。 org/stdlib-2.3.1/libdoc/date/rdoc/DateTime.html#M000214)。如果使用'ArgumentError'失敗,則輸入的日期字符串與指定的格式不匹配。 – pah

+0

請記住,使用這個正則表達式只會*驗證格式*。它不檢查時間戳(即2月31日)是否有效。 – dognose

回答

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 

另一個(與AM缺少M):

$ 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 
相關問題