2012-05-01 5 views
5

निम्नलिखित क्यों भिन्न हैं?रूबी डेट समीकरण अपेक्षित सत्य मूल्य वापस नहीं कर रहा है

Time.now.end_of_day  == Time.now.end_of_day - 0.days  # false 
Time.now.end_of_day.to_s == Time.now.end_of_day - 0.days.to_s # true 
+0

'Time.now.end_of_day.to_s == Time.now.end_of_day.to_s - ((1 - 1) * 7) .days.to_s' से वापस क्या होता है? या शायद 'Time.now.end_of_day.to_s == (Time.now.end_of_day - ((1 - 1) * 7) .days) .to_s' –

+0

@Phrogz, जो इसे ठीक नहीं करता है। मुझे लगता है कि जॉर्ज सही है, आपको 'to_i' का उपयोग करना होगा। – Mischa

+0

@ मिस्चा कितना दिलचस्प है; मुझे सही करने के लिए धन्यवाद। – Phrogz

उत्तर

4

क्योंकि नैनोसेकंड की संख्या अलग है:

ruby-1.9.2-p180 :014 > (Time.now.end_of_day - 0.days).nsec 
=> 999999000 
ruby-1.9.2-p180 :015 > Time.now.end_of_day.nsec 
=> 999999998 
+1

मैं व्यक्तिगत रूप से '# end_of_day' में एक बग मानता हूं। नैनोसेकंड मौजूद हैं, निश्चित रूप से, लेकिन अगर end_of_day दिन के अंत से कुछ नैनोसेकंड है, तो यह नहीं है, ermm, दिन का अंत;) – d11wtq

+1

लेकिन जब आप इससे 0 दिन घटाते हैं, तो यह अंत से भी आगे है दिन का। तो यदि कोई बग है तो यह 'end_of_day' की तुलना में' days' में है। – Mischa

3

तरह मिशा ने कहा, बार नैनोसेकंड से भिन्न होते हैं। Here रेल में ऐसा करने के लिए वर्कअराउंड और फिक्स पर एक लेख है, खासकर आपके जैसे परीक्षणों के लिए।

प्रतीत होता है कि प्रतीत होता है कि सबसे सरल दृष्टिकोण .to_i जोड़कर सेकंड को गोल करना है, लेकिन अन्य विकल्प भी हैं।

docs on the Time object से::

2

मिशा के जवाब पर विस्तार करने के लिए "सभी बार अंश हो सकता है जब एक दूसरे को-बार है कि जाहिरा तौर पर बराबर जब प्रदर्शित अलग हो सकता है जब की तुलना में कर रहे हैं के साथ कई बार की तुलना में इस तथ्य के प्रति सचेत रहें।। "

तो आपकी पहली गणना दो टाइम ऑब्जेक्ट्स की तुलना करती है, जो नैनोसेकंद स्तर पर अलग होती हैं, लेकिन आपकी दूसरी गणना समय ऑब्जेक्ट्स को स्ट्रिंग्स में परिवर्तित करती है, जो नैनोसेकंड को अनदेखा करती है और सच होती है क्योंकि दोनों स्ट्रिंग प्रस्तुतियां मेल खाते हैं।

संबंधित मुद्दे