2009-07-23 4 views
1

시작 및 종료 시간이 포함 된 여러 개의 CSV 파일이 있습니다. FasterCSV를 사용하여 파일을 파싱 할 수 있지만 Ruby에서 재생 시간을 가져 오는 가장 좋은 방법은 모르겠습니다. 다음은 CSV 파일의 각 행에 대해 생성 된 내 해시 값입니다.Ruby : CSV 파일에서 2 datetimes 주어진 기간을 어떻게 계산합니까?

start time: Mon Jul 20 18:25:17 -0400 2009 
end time: Mon Jul 20 18:49:43 -0400 2009 

답변

2

다른 하나에서 DateTime을 뺀 기간을 얻을 수 있습니다. : date_time 변환기를 포함하는 경우 FasterCSV에서 DateTime 객체를 가져옵니다. 예 :

FasterCSV.foreach(some_file, :converters => [:date_time]) do |row| 
    #blah 
end 

또는 DateTime # parse를 사용하여 직접 변환 할 수 있습니다.

거기에서 Date#day_fraction_to_time을 사용하면 [hours, minutes, seconds, fraction_of_a_second]을 포함하는 배열을 얻을 수 있습니다. 이는 하루의 일부분보다 작업하기가 더 쉽다고 생각합니다.

표시 방법에 따라 answers of this question에서 도움이 될만한 정보가있을 수 있습니다. 이러한 답변은 Rails에 대한 것이지만, Rails에서 필요한 부분을 포함하거나 함수의 소스 (Rails 설명서에서 사용 가능)를보고 어떻게 수행하는지 확인할 수 있습니다. 그것은 꽤 자명합니다.

3

"최고"인지는 모르지만 예를 들어 이것에 대한 DateTime 클래스 :

require 'date' 

d1 = DateTime.parse("Mon Jul 20 18:25:17 -0400 2009") 
d2 = DateTime.parse("Mon Jul 21 18:25:17 -0400 2009") 

puts "Duration is #{(d2-d1).to_f} days" 
+1

DateTime 클래스는 정상이지만 'Time.rb'도 표준 Time 클래스를 확장합니다. 모호성을 처리하지 않으며 다른 캘린더를 지원하지 않으므로 훨씬 가볍습니다. 구문은 동일합니다 ('Time.parse()') – hhaamu

+0

부록 : t2 - t1은 초 단위로 간격을 반환합니다. – hhaamu

+0

아마도. TimeTime보다 더 영리 해 보이기 때문에 DateTime을 사용하는 경향이 있습니다. Ruby와 다른 언어를 선택할 때 가장 큰 포인트입니다. –

관련 문제