मिनटों में दो Joda-Time DateTimes के बीच अंतर कैसे पता करें


141

नीचे मैंने जो विधि लिखी है:

public List<Map<String, Object>> loadNotYetInEmployee(int shift, Date date,
        int transitionVal, String type, User user) {

    DateTime datetime = new DateTime(date);
    datetime = datetime
            .plus(Period.minutes(shiftTiming.getSession1InTime()));

    List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();

    sql = SqlMapUtils.getSql("attendance.attendancestatus.latein",
            parameters);
    result = getJdbcTemplate().queryForList(sql);
    for (int i = 0; i < result.size(); i++) {
        Date punchInTime = (Date) result.get(i).get("punchtime");
        DateTime punchTime = new DateTime(punchInTime);
    }
    return result;
}

अब मेरी विधि से आप देख सकते हैं कि मेरे पास नाम की वस्तु में एक Joda-Time DateTime वस्तु है datetimeऔर मेरे परिणाम से मुझे एक टाइमस्टैम्प मिल रहा है जिसे मैं jodatime में परिवर्तित कर रहा हूं punchTime। अब मैं इन दोनों तिथियों के बीच के अंतर का पता लगाना चाहता हूं, मैं यह कैसे करूं?



2
लेकिन यह तभी काम करेगा जब आपकी DateTime ऑब्जेक्ट एक ही TimeZone में हों।
टियागो

1
Days.daysBetween(d1, d2)आपके मित्र का पड़ोसी है
शुभम चौधरी

जवाबों:


79

यह आपको मिलिसेकंड में दो DateTime वस्तुओं के बीच अंतर मिलेगा:

DateTime d1 = new DateTime();
DateTime d2 = new DateTime();

long diffInMillis = d2.getMillis() - d1.getMillis();

78
MadProgrammer द्वारा उत्तर स्वीकृत उत्तर होना चाहिए था। के सरल उपयोग पर ध्यान दें Minutes.minutesBetween
बेसिल बॉर्क

5
नहीं, मैं असहमत हूं, यह बहुत चिंताजनक और अस्पष्ट है: "पंच समय तिथि के बीच का मिनट" "दूसरी तिथि मिलीसेकंड माइनस फर्स्ट डेट मिलीसेकंड" से भी बदतर है
जोनाथन नेफल्ड

4
यह wil दिन की बचत को ध्यान में नहीं रखता है।
सैंडर वर्सल्यूज

454

कुछ इस तरह...

DateTime today = new DateTime();
DateTime yesterday = today.minusDays(1);

Duration duration = new Duration(yesterday, today);
System.out.println(duration.getStandardDays());
System.out.println(duration.getStandardHours());
System.out.println(duration.getStandardMinutes());

जो आउटपुट देता है

1
24
1440

या

System.out.println(Minutes.minutesBetween(yesterday, today).getMinutes());

जो शायद आप के बाद और अधिक है


क्या उपरोक्त खाता समय क्षेत्र में है? या मुझे पहले यूटीसी / जीएमटी में बदलना चाहिए?
डोक दाह

@DooDah यह एक अच्छा सवाल है, मुझे विश्वास है कि यह करता है (जैसा कि JodaTime की अवधारणा है LocalTime), लेकिन मैं आपको सुझाव दूंगा कि आप इसे देखें और देखें। हालांकि यह सवाल होगा कि किस समय क्षेत्र में परिणामी मूल्य का प्रतिनिधित्व किया जाएगा?
मडप्रोग्रामर

मैं इसका परीक्षण करूंगा और इसका पता लगाऊंगा। मेरे लिए, परिणामी टाइमज़ोन संभवतः सर्वर होगा जिस पर कोड चल रहा है। मैं एक निर्धारित कतार को कार्यान्वित कर रहा हूं और अब और कुछ भविष्य के समय के बीच की राशि की गणना दूसरे समय क्षेत्र से करने की आवश्यकता होगी। मुझे जो मिलेगा, उसकी रिपोर्ट दूंगा।
डू डाह

2
मैं मानता हूं, यह चयनित उत्तर होना चाहिए था। इसके साफ और सरल।
सिड

एक नया अंतर बनाने के लिए सिर्फ एक समय का अंतर पाने के लिए एक वस्तु बस शांत नहीं है। कल्पना करें कि दिनांक / समय ऑब्जेक्ट्स की एक बड़ी सरणी पर एक समय अंतर करने के लिए।
AndroidDev


3
DateTime d1 = ...;
DateTime d2 = ...;
Period period = new Period(d1, d2, PeriodType.minutes());
int differenceMinutes = period.getMinutes();

व्यवहार में, मुझे लगता है कि यह हमेशा उसी परिणाम देगा जो उत्तर के आधार पर होता है Duration। मिनट की तुलना में एक अलग समय इकाई के लिए, हालांकि, यह अधिक सही हो सकता है। उदाहरण के लिए 2016/2/2 से 2017/2/1 तक 365 दिन हैं, लेकिन वास्तव में यह 1 वर्ष से कम है और यदि आप उपयोग करते हैं तो 0 वर्ष तक कम हो जाना चाहिए PeriodType.years()

सिद्धांत रूप में लीप सेकंड के कारण मिनटों के लिए ऐसा ही हो सकता है, लेकिन जोडा लीप सेकंड का समर्थन नहीं करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.