जवाबों:
जैसा कि पहले ही कहा गया है, आप 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 का जवाब लगभग सही है, लेकिन मुझे उम्मीद है कि मैं थोड़ा और जोड़ सकता हूं।
जियो ने मिलीसेकंड में समय के बारे में पूछा; यह एक पूर्णांक मात्रा की तरह लगता है, और मैं फ्लोटिंग-पॉइंट भूमि के माध्यम से चक्कर नहीं लगाऊंगा। इस प्रकार मेरा दृष्टिकोण होगा:
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 है ।
मैं दिनांक समय के पाया है strptime और strftime कार्यों को पार्स और दिनांक / समय तार स्वरूपण में अमूल्य (जैसे करने के लिए / लॉग से)। जानने के लिए क्या काम आता है:
इन फ़ंक्शंस के लिए फ़ॉर्मेटिंग वर्ण (% H,% M,% S, ...) लगभग किसी भी यूनिक्स / लिनक्स सिस्टम पर पाए जाने वाले C फ़ंक्शंस के समान हैं; तथा
कुछ और हैं: विशेष रूप से, % L मिलीसेकंड करता है!
unknown:)
DateTime.now.strftime("%Q")
उदाहरण का उपयोग:
>> DateTime.now.strftime("%Q")
=> "1541433332357"
>> DateTime.now.strftime("%Q").to_i
=> 1541433332357
Time.now.to_f आपकी मदद कर सकता है, लेकिन यह सेकंड में लौटता है।
सामान्य तौर पर, बेंचमार्क I के साथ काम करते समय:
यह एक बहुत ही सरल प्रक्रिया है, इसलिए मुझे यकीन नहीं है कि आप वास्तव में यह पूछ रहे थे ...
%L रूबी में मिलीसेकंड देता है
require 'time'
puts Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L")
या
puts Time.now.strftime("%Y-%m-%d %H:%M:%S.%L")
आपको मिलीसेकंड में वर्तमान टाइमस्टैम्प देगा।
उत्तर कुछ इस प्रकार है:
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