2016-08-02 12 views
1

私はタイムスタンプを検証するプログラムを持っていますが、現在は正規表現を使って検証しています。私が知りたいのは、タイムスタンプを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 
+1

あなたは([DateTime.strptime]を使用することができます。http://ルビー-docの。 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 
関連する問題