2016-08-02 5 views
1

Ich habe ein Programm, das Zeitstempel überprüft, aber von jetzt an verwendet es einen Regex, um sie zu überprüfen. Ich möchte wissen, ob es einen einfacheren Weg gibt, einen Zeitstempel im folgenden Format zu überprüfen: 05/03/2016 05:34:54 AM oder .Einfacher Weg, um einen Zeitstempel zu überprüfen

Die Methoden für das Programm wie folgt aussehen:

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

Sie können [DateTime.strptime] (http: // ruby-doc. org/stdlib-2.3.1/libdoc/date/rdoc/DateTime.html # M000214) mit dem entsprechenden Format. Wenn es mit "ArgumentError" fehlschlägt, stimmt die Eingabedatenzeichenfolge nicht mit dem angegebenen Format überein. – pah

+0

Behalten Sie im Hinterkopf, dass die Verwendung eines Regex nur das Format * validiert. Es prüft nicht, ob der Zeitstempel (d.h. der 31. Februar) überhaupt gültig ist. – dognose

Antwort

1

Sie DateTime.strptime mit dem entsprechenden Format verwenden können. Wenn es mit ArgumentError fehlschlägt, stimmt die Eingabedatenzeichenfolge nicht mit dem angegebenen Format überein.

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 

Einige Tests:

$ 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 

Weitere (mit einem fehlenden M auf 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