2012-07-01 10 views
6

मुझे आश्चर्य है कि JodaTime में कोई मानक एपीआई है जो निर्दिष्ट सहिष्णुता के साथ 2 DateTime वस्तुओं की तुलना करने के लिए है? मैं Joda मानक API का उपयोग करके अधिमानतः एक-लाइनर की तलाश में हूं। समय-aritmethic अभिव्यक्तियों के लिए नहीं this post में।स्वीकार्य ऑफसेट (सहिष्णुता) के साथ जोडा डेटटाइम ऑब्जेक्ट की तुलना कैसे करें?

आदर्श रूप में, यह होगा कुछ की तरह:

boolean areNearlyEqual = SomeJodaAPIClass.equal(dt1, dt2, maxTolerance); 

धन्यवाद!

उत्तर

8

इस का उपयोग करें:

new Duration(dt1, dt2).isShorterThan(Duration.millis(maxTolerance)) 
5

इस पोस्ट पुरानी है, लेकिन मैं स्वीकार कर लिया समाधान थोड़ा लंबा में लाइन खोजने के लिए और मैं क्या मौजूद है बेहतर कुछ नहीं मिला।

public class DateTimeUtils 
{ 
    public static boolean dateIsCloseToNow(Date dateToCheck, 
              Duration tolerance) 
    { 
     return dateIsCloseToNow(new DateTime(dateToCheck), tolerance); 
    } 

    public static boolean dateIsCloseToNow(DateTime dateToCheck, 
              Duration tolerance) 
    { 
     return datesAreClose(dateToCheck, DateTime.now(), tolerance); 
    } 

    public static boolean datesAreClose(Date date1, 
             Date date2, 
             Duration tolerance) 
    { 
     return datesAreClose(new DateTime(date1), new DateTime(date2), tolerance); 
    } 

    public static boolean datesAreClose(DateTime date1, 
             DateTime date2, 
             Duration tolerance) 
    { 
     if (date1.isBefore(date2)) { 
      return new Duration(date1, date2).isShorterThan(tolerance); 
     } 
     return new Duration(date2, date1).isShorterThan(tolerance); 
    } 

तो इस लाइन:

new Duration(date.getTime(), System.currentTimeMillis()).isShorterThan(Duration.standardSeconds(5) 

हो जाता है:

DateUtils.dateIsCloseToNow(date, Duration.standardSeconds(5)) 

मुझे लगता है कि वास्तव में इकाई परीक्षण मामलों में उपयोगी पाया तो मैं एक छोटा सा वर्ग है कि यह तिथि और दिनांक समय के लिए लपेटता किया जहां मुझे निर्माण की तारीख को सत्यापित करने की आवश्यकता थी।

+2

यह काफी आसान दिखता है। मेरा एकमात्र आलोचना एक छोटा सा नाम है, नामकरण के बारे में: मैं नाम 'तारीख ...' से 'डेटाटाइम ...' (जैसे कि 'तिथियांअरेक्वाल' की बजाय 'डेटाइम्सअरेक्वाल' नाम से बदलना होगा), गलत नामित 'जावा' के साथ भ्रम से बचने के लिए .util.Date' और 'LocalDate' के साथ। मैं 'IsEow' के बजाय 'AreEqual' और 'IsCloseToNow' के बजाय 'AreClose' भी कह सकता हूं। –

+0

"IsClose" वास्तव में स्पष्ट हो सकता है। डेटटाइम के लिए, मुझे यकीन नहीं है। चूंकि विधियों दोनों दिनांक और दिनांक समय पैरामीटर के रूप में लेते हैं, मुझे लगता है कि तिथि स्पष्ट है। हालांकि, कक्षा को डेटटाइम उपयोग के लिए नामित किया जा सकता है। मैं पोस्ट संपादित करूंगा। – FredBoutin

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