2009-04-28 2 views
18

Time.parse를 사용하여 문자열에서 Time 객체를 만듭니다.Ruby Time.parse가 범위 오류를 벗어납니다.

Time.parse("05-07-2009 19:00") 

하지

어떤 아이디어 않는 반면 어떤 이유로

Time.parse("05-14-2009 19:00") 

를 들어

는 인수 우리의 범위 오류의 원인은?

답변

0

아마 그래서 첫 번째 값은 14 월 5 일을 지정하기 위해 노력하고, 일 - 월 - 년 형식을 기대하고있다.

26

당신은 문자열 사용의 형식을 알고있는 경우 :

Time.strptime(date, format, now=self.now) {|year| ...} 

http://www.ruby-doc.org/core-1.9/classes/Time.html#M000266

그것은 당신의 문제를 해결하고 아마 Time.parse보다 빠르게됩니다.

편집 : 그들은 시간 클래스에서 strptime 걸렸지 만 어쨌든 Date.strptime라는 같은

보인다. 당신이 레일에있는 경우에 당신은 할 수 있습니다 :

Date.strptime("05-14-2009 19:00","%m-%d-%Y %H:%M").to_time 

당신이 순수 루비를 사용하는 경우 다음 필요도

require 'date' 
d=Date._strptime("05-14-2009 19:00","%m-%d-%Y %H:%M") 

Time.utc(d[:year], d[:mon], d[:mday], d[:hour], d[:min], 
     d[:sec], d[:sec_fraction], d[:zone]) 

참조 : Date and Time formating issues in Ruby on Rails합니다.

+0

strptime은 멋있어 보이지만 Time.strptime에 대해 정의되지 않은 메서드가있어서 시간 객체가 필요합니다. – Tony

+1

... 여기에 사용 시간 Time.strptime (date_time [ 'value'], "% m- % d- % Y % H : % M ") – Tony

+0

strptime이 Time에 더 이상 존재하지 않는 것 같습니다. 대안 – Miquel

13

이는 휴리스틱 스가 Time#parse이기 때문입니다.

영미어 형식 때문입니다.

대시 '-'는 mm-dd-yyyy이고 슬래시 '/'는 dd/mm/yyyy를 나타냅니다.

이 동작은 이고, 의도적으로 1.9에 변경됩니다. eur, iso 및 jp 날짜 표준을 달성합니다.

+0

여기에 형식이 섞여 있다고 생각합니다. 대시'-'로'dd-mm-yyyy' 또는'yyyy-mm-dd'를 기대합니다 (후자의 경우 두 번째'y '는 선택 사항입니다).'/'는'mm/dd/yyyy' (여기서 처음 두 개는 선택 사항입니다.) –

+2

이것이 낡은 대답이라는 것을 알고 있지만 설명 된 행동을 보지 못했습니다. 나는 1.9.2p136을 사용하고있다. Time # parse는 '-'또는 '/'를 사용할지 여부에 관계없이 입력을 dd/mm/yyyy로 해석합니다. –

+0

위 내 의견이 올바르지 않습니다. Ruby 1.8.6과 1.8.7에서는'mm/dd/yyyy'이고 1.9.2에서는'dd/mm/yyyy'입니다. 두 Ruby 모두 대시 형식을'dd-mm-yyyy'로 구문 분석합니다. 하지만 루비 버전 만있는 경우 또는 다른 요인이 구문 분석에 영향을 미치는 경우 100 % 확실하지 않습니다. 컴퓨터의 날짜, 시간, 지역 및/또는 시간대 설정과 비슷합니다. –

4

아마도이 문제를 해결할 필요는 없지만 자연 언어 날짜/시간 파서 Chronic을 체크 아웃하면 나에게 많은 시간을 절약 할 수 있습니다.

관련 문제