your programing

Ruby에서 현재 시간을 13 자리 정수로 얻는 방법은 무엇입니까?

lovepro 2020. 10. 8. 08:28
반응형

Ruby에서 현재 시간을 13 자리 정수로 얻는 방법은 무엇입니까?


jQuery에포크 (1970 년 1 월 1 일) 이후의 밀리 초 수로 현재 시간을 반환하는 함수가 있습니다.

time = new Date().getTime();

Ruby에서 동일한 작업을 수행 할 수있는 방법이 있습니까?

지금 Time.now.to_i은 훌륭하게 작동하지만 10 자리 정수 (초)를 반환하는 Ruby를 사용 하고 있습니다.

에서와 같이 밀리 초 수를 표시하려면 jQuery어떻게해야합니까?


require 'date'

p DateTime.now.strftime('%s') # "1384526946" (seconds)
p DateTime.now.strftime('%Q') # "1384526946523" (milliseconds)

Javascript gettime()는 epoch 이후의 밀리 초 수를 반환합니다.

Ruby Time.now.to_i는 epoch 이후의 초 수를 제공합니다. 으로 변경 Time.now.to_f하면 여전히 초를 얻지 만 분수 구성 요소가 있습니다. 여기에 1,000을 곱하면 밀리 초가됩니다. 그런 다음 사용 #to_i하여 정수로 변환하십시오. 그리고 결국 :

(Time.now.to_f * 1000).to_i

(Time.now.to_f * 1000).to_i 같은 일을해야합니다.


조심하세요. 혼동하지 마세요. 루비가 소수의 초를 부동 소수점으로 지원한다는 사실이 실제로 부동 소수점 숫자가되는 것은 아닙니다. Python에서 Wireshark 타임 스탬프 시간 비교를 할 때 문제가 생겼습니다 ... pcap-ng의 시간 계산이 작동하지 않았습니다. 두 부분 (적분 초와 정수 나노초)을 두 정수로 다뤄야 적절한 숫자를 얻을 수있었습니다.

부동 소수점 숫자에는 정확도 문제 가 있기 때문 입니다. 사실, Ruby를 간단히 살펴보면 to_f가 nsec와 같지 않음을 알 수 있습니다.

irb(main):019:0> t=Time.now
=> 2015-04-10 16:41:35 -0500
irb(main):020:0> puts "#{t.to_f}; #{t.nsec}"
1428702095.1435847; 143584844

주의 사항 프로그래머. 3 개의 유효 숫자로 안전 할 수 있지만 사실은 남아 있습니다. 컴퓨터의 부동 소수점 숫자는 근사치입니다. 현대 컴퓨터의 나노초 카운터는 정수입니다.


를 사용하여 strftime초 수를 얻고 분수 밀리 초 (또는 필요한 경우 더 작은 단위)를 추가 할 수 있습니다.

2.2.2 :001 > t = Time.new
 => 2015-06-02 12:16:56 -0700 
2.2.2 :002 > t.strftime('%s%3N')
 => "1433272616888" 

이 값은 반올림되지는 않지만 보시다시피 to_f또는 마이크로 초로 이동 하면 잘립니다 .

2.2.2 :003 > t.to_f
 => 1433272616.888615
2.2.2 :004 > t.usec
 => 888615 

to_f/ to_i솔루션은 동일한 문제가 있습니다 :

2.2.2 :009 > (t.to_f * 1000).to_i
 => 1433272616888

따라서 밀리 초 정확도에 대해 정말로 관심이 있다면 더 나은 방법은 다음 to_fround같습니다.

2.2.2 :010 > (t.to_f * 1000).round
 => 1433272616889

로 즉, 말했다 워드 프로세서에서 언급 한 , 당신이 정말로 그래서 만약, "IEEE 754 배의 신기원 이후 나노초의 수를 나타내는 정확한 충분하지 않다" 정말 걱정, 생각 to_r대신에 to_f-

2.2.2 :011 > (t.to_r * 1000).round
 => 1433272616889 

-밀리 초 단위로만 반올림하는 경우에는 괜찮습니다.


를 사용하여 Time 객체를 가져 오고 Time.now호출 #to_i하면 Unix 타임 스탬프 (epoch에서 초)를 반환합니다. #to_fepoch에서 밀리 초를 얻는 데 사용할 수있는 분수 초를 제공합니다.

Time.now.to_f * 1000

typecast Integer (1e6 * Time.now.to_f)는 밀리 초를 저장할 수있는 Bignum을 반환합니다.

참고 URL : https://stackoverflow.com/questions/13148888/how-to-get-the-current-time-as-13-digit-integer-in-ruby

반응형