답변:
이미 언급했듯이 Time
숫자 (또는 부동 소수점) 값인 것처럼 객체 . 이러한 작업은 쉽게 변환 할 수있는 두 번째 해상도를 생성합니다.
예를 들면 :
def time_diff_milli(start, finish)
(finish - start) * 1000.0
end
t1 = Time.now
# arbitrary elapsed time
t2 = Time.now
msecs = time_diff_milli t1, t2
잘라낼 지 여부를 결정해야합니다.
finish.to_f - start.to_f
?
finish - start
부동 소수점을 생성합니다. .to_f
중복됩니다.
(t2 - t1).in_milliseconds
대답이 잘못 선택되었다고 생각합니다. 그 방법은 밀리 초가 아닌 초를 제공합니다.
t = Time.now.to_f
=> 1382471965.146
여기에서는 부동 값이 밀리 초라고 가정합니다.
Time.now
하는 것은 시간을 소수점 앞의 초와 소수점 뒤의 최대 나노초 (nsec가 완전히 정확하지 않을 수 있음)의 부동 소수점 값으로 처리하는 것입니다. 따라서이 값을 곱 1000.0
하면 밀리 초가됩니다.
ezpz의 대답은 거의 완벽하지만 조금 더 추가 할 수 있기를 바랍니다.
Geo는 시간에 대해 밀리 초 단위로 물었습니다. 이것은 정수량처럼 들리며 부동 소수점 땅을 우회하지 않을 것입니다. 따라서 내 접근 방식은 다음과 같습니다.
irb(main):038:0> t8 = Time.now
=> Sun Nov 01 15:18:04 +0100 2009
irb(main):039:0> t9 = Time.now
=> Sun Nov 01 15:18:18 +0100 2009
irb(main):040:0> dif = t9 - t8
=> 13.940166
irb(main):041:0> (1000 * dif).to_i
=> 13940
정수 1000을 곱하면 분수가 완벽하게 보존되며 조금 더 빠를 수 있습니다.
날짜와 시간을 다루는 경우 DateTime 클래스 를 사용해야 할 수 있습니다 . 이것은 유사하게 작동하지만 변환 계수는 24 * 3600 * 1000 = 86400000입니다. 입니다.
DateTime의 strptime 및 strftime 함수는 날짜 / 시간 문자열 (예 : 로그로 /부터)을 구문 분석하고 형식화하는 데 매우 유용합니다. 알아두면 편리한 것은 다음과 같습니다.
이러한 함수의 형식화 문자 (% H, % M, % S, ...)는 Unix / Linux 시스템에서 볼 수있는 C 함수의 경우와 거의 동일합니다. 과
몇 가지 더 있습니다. 특히 % L 은 밀리 초를 수행합니다!
unknown
:)
Time.now.to_f 는 당신을 도울 수 있지만 초를 반환합니다.
일반적으로 벤치 마크로 작업 할 때 I :
아주 간단한 과정이라서 정말이 질문을하신 건지 모르겠네요 ...
대답은 다음과 같습니다.
t_start = Time.now
# time-consuming operation
t_end = Time.now
milliseconds = (t_start - t_end) * 1000.0
그러나, 그 Time.now
접근 방식이 부정확 할 위험이 있습니다. Luca Guidi의 게시물을 찾았습니다.
https://blog.dnsimple.com/2018/03/elapsed-time-with-ruby-the-right-way/
시스템 시계는 지속적으로 부동하며 앞으로 만 이동하지 않습니다. 경과 시간 계산이이를 기반으로하는 경우 계산 오류 또는 중단이 발생할 가능성이 큽니다 .
따라서 Process.clock_gettime
대신 사용 하는 것이 좋습니다 . 다음과 같은 것 :
def measure_time
start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
yield
end_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
elapsed_time = end_time - start_time
elapsed_time.round(3)
end
예:
elapsed = measure_time do
# your time-consuming task here:
sleep 2.2321
end
=> 2.232