2016-08-02 2 views
1

나는 타임 스탬프를 확인하는 프로그램을 가지고 있지만, 지금은 정규식을 사용하여 타임 스탬프를 확인합니다. 다음 형식으로 타임 스탬프를 확인하는 쉬운 방법이 있다면 05/03/2016 05:34:54 AM 또는 PM입니다. 프로그램에 대한타임 스탬프를 확인하는 더 쉬운 방법

방법은 다음과 같이 : 당신은 적절한 형식으로 DateTime.strptime을 사용할 수 있습니다

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

Keep in Mind, 이것에 대한 정규식을 사용하면 * 형식을 확인할 수 있음 *. 타임 스탬프 (즉, 2 월 31 일)가 유효한지 여부는 확인하지 않습니다. – dognose

답변

1

. 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 
관련 문제