다음 코드는이 같은 날짜 문자열을 검색 - 2014/06/10 0시시간 포맷 루비
window1= line[13].scan(/\d\d\/\d\d\/\d\d\d\d\s\d\d\:\d\d/) if line[13]
가 어떻게 시간 클래스의 객체로이 저장합니까? 당신의 형식을 가정
다음 코드는이 같은 날짜 문자열을 검색 - 2014/06/10 0시시간 포맷 루비
window1= line[13].scan(/\d\d\/\d\d\/\d\d\d\d\s\d\d\:\d\d/) if line[13]
가 어떻게 시간 클래스의 객체로이 저장합니까? 당신의 형식을 가정
좋은 시작이 될 것이다 일/월/년
require 'date'
DateTime.strptime('06/10/2014 00:00', '%d/%m/%Y %H:%M')
시간과 분 기호를 뒤집습니다. – mcfinnigan
window1 = DateTime.strptime(line[13], '%d/%m/%Y %H:%M') if line[13]
입니다.
http://www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html은 좋은 참고 자료입니다. 실제로, 일반적으로 ruby-doc.org는 아마도 시간을 보내는 좋은 장소 일 것입니다.
scan
주의를 기울이지 않으면 발로 몸을 쏠 수 있습니다. 이것을 고려하십시오 :
str = 'foo 06/10/2014 00:00 bar'
str.scan(/\d\d\/\d\d\/\d\d\d\d\s\d\d\:\d\d/) # => ["06/10/2014 00:00"]
scan
문자열에 모든 일치하는 패턴의 배열을 반환합니다. 당신은 단지 하나의 값을 얻기 위해 정기적 일치를 사용하여 하나의 값이 알고 있다면, 대신
str = 'foo 06/10/2014 00:00 bar 99/99/9999 99:99 baz'
str.scan(/\d\d\/\d\d\/\d\d\d\d\s\d\d\:\d\d/) # => ["06/10/2014 00:00", "99/99/9999 99:99"]
: 문자열이 조금 달랐다 경우, 예기치 않은 무언가를 얻을 수 있습니다.
str[/\d\d\/\d\d\/\d\d\d\d\s\d\d\:\d\d/] # => "06/10/2014 00:00"
당신이 반복 \d
(자리 문자 세트)의 긴 시리즈를 얼마나 공지 사항 및 /
구분 기호 ("\/
")를 탈출했다. 사람들은 패턴이 더 읽을 수 있도록 몇 가지 트릭을 사용하여 줄일 수 있습니다
%r#\d+/\d+/\d+ \d+:\d+# # => /\d+\/\d+\/\d+ \d+:\d+/
str[%r#\d+/\d+/\d+ \d+:\d+#] # => "06/10/2014 00:00"
\d+
는 반복 \d
을 감소하지만, 탈출 구분을 없애 도움이되지 않는 한 또는-이상의 숫자를 의미합니다. 대체 구분 기호가 도움이 될 것입니다. %r
을 사용하면됩니다. 패턴이
\/\d
에서
/\d
그것은 사소한 일이 있지만 가독성을하는 데 도움이 갈 수 있도록 %r
다음 첫 번째 문자는 구분 기호를 정의합니다.
곳보다 두 개 또는 4 개의보다, 비록 새로운 문제를 열 수 \d+
을 사용하여, 숫자는 캡처 할 수 있습니다 :
str = 'foo 1/22/55555 22:666666 bar'
str[%r#\d+/\d+/\d+ \d+:\d+#] # => "1/22/55555 22:666666"
정규식 패턴이 허용되는 문자 수를 지정하는 우리를 할 수 있도록 확장되었다 :
str = 'foo 06/10/2014 00:00 bar'
str[%r#\d+/\d+/\d+ \d+:\d+#] # => "06/10/2014 00:00"
str[%r#\d{1,2}/\d{1,2}/\d{4} \d{1,2}:\d{2}#] # => "06/10/2014 00:00"
str = 'foo 1/22/55555 22:666666 bar'
str[%r#\d{1,2}/\d{1,2}/\d{4} \d{1,2}:\d{2}#] # => nil
시간 값으로 이동 중 ....
타임 클래스는 시간 인스턴스 캡처 한 문자열을 구문 분석하고 반환 할 수 있습니다, 당신은 생각이와 매우 조심해야
str = 'foo 06/10/2014 00:00 bar'
time_str = str[%r#\d{1,2}/\d{1,2}/\d{4} \d{1,2}:\d{2}#] # => "06/10/2014 00:00"
require 'time'
Time.parse(time_str).class # => Time
Time.parse(time_str) # => 2014-10-06 00:00:00 -0700
을하기 때문에 형식 "MM/DD/YYYY시 : 분" "dd/mm/yyyy hh : mm"과 쉽게 혼동됩니다. 첫 번째는 미국의 표준, 두 번째는 세계의 대부분의 주위에 표준, 그리고 충돌이있을 때 언어가 싫어하는 :
str = 'foo 31/01/2014 00:00 bar'
time_str = str[%r#\d{1,2}/\d{1,2}/\d{4} \d{1,2}:\d{2}#] # => "31/01/2014 00:00"
require 'time'
Time.parse(time_str).class # => Time
Time.parse(time_str) # => 2014-01-31 00:00:00 -0700
그래서,에 :
str = 'foo 01/31/2014 00:00 bar'
time_str = str[%r#\d{1,2}/\d{1,2}/\d{4} \d{1,2}:\d{2}#] # => "01/31/2014 00:00"
require 'time'
Time.parse(time_str).class # =>
Time.parse(time_str) # =>
# ~> 'local': argument out of range (ArgumentError)
대 당신의 문자열이 어떤 지역/지역에서 오는 것인지를 반드시 알아야한다. 그렇지 않으면 무작위 예외가 발생하거나 월/일 값이 엉망이 될 것이다.
parse
은 편리하지만이 문제로 인해 양날 검이됩니다. 당신은 특정 형식의 문자열로 strptime
을 사용을 시도 할 수 있습니다 :
str = 'foo 01/31/2014 00:00 bar'
time_str = str[%r#\d{1,2}/\d{1,2}/\d{4} \d{1,2}:\d{2}#] # => "01/31/2014 00:00"
require 'time'
Time.strptime(time_str, '%m/%d/%Y %H:%M') # => 2014-01-31 00:00:00 -0700
str = 'foo 31/01/2014 00:00 bar'
time_str = str[%r#\d{1,2}/\d{1,2}/\d{4} \d{1,2}:\d{2}#] # => "31/01/2014 00:00"
Time.strptime(time_str, '%d/%m/%Y %H:%M') # => 2014-01-31 00:00:00 -0700
Time.strptime(time_str, '%m/%d/%Y %H:%M') # =>
# ~> 'strptime': invalid strptime format - `%m/%d/%Y %H:%M' (ArgumentError)
그러나 다시, 당신은 형식이 무엇인지 모른다면, 당신은 여전히 문제로 실행할 수 있습니다. 이것은 프로그래밍에있어서 정말로 어려운 부분 중 하나이며, 사이트에서 누군가가 어디에 있는지 묻습니다. 추측은 잘 작동하지 않습니다.
'line [13]'은 날짜 문자열 만 포함합니까? 아니면 더 큰 문자열에서 날짜를 추출합니까? – Stefan