2010-11-09 15 views
38

मैंने पहले कभी भी JodaTime का उपयोग नहीं किया है, लेकिन इस प्रश्न का उत्तर How to get ordinal Weekdays in a Monthजोडाटाइम DateUtils.truncate के बराबर()

मैं इसे करने की कोशिश की और दिन नीचे सभी क्षेत्रों अनसेट को यह बदसूरत कोड के साथ आया था:

DateTime startOfMonth = 
    input.withDayOfMonth(1) 
     .withHourOfDay(0)  // there 
     .withMinuteOfHour(0) // has got to 
     .withSecondOfMinute(0) // be a shorter way 
     .withMillisOfSecond(0); // to do this 

कहाँ Commons/Lang बराबर DateUtils का उपयोग कर

Date startOfMonth = DateUtils.truncate(input, Calendar.MONTH); 

होगा कि ऐसा करने के लिए पसंदीदा मुहावरा है क्या जोडाटाइम में?

उत्तर

39

आप roundFloorCopy() DateUtils.truncate

नकल करने के लिए
Date truncateMonth = DateUtils.truncate(input, Calendar.MONTH); 
-> DateTime truncateMonth = input.dayOfMonth().roundFloorCopy(); 

Date truncateMinute = DateUtils.truncate(input, Calendar.MINUTE); 
-> DateTime truncateMinute = input.minuteOfDay().roundFloorCopy(); 

Date truncateHourOfDay = DateUtils.truncate(input, Calendar.HOUR_OF_DAY); 
-> DateTime truncateHourOfDay = input.hourOfDay().roundFloorCopy() 
+1

मेरी राय में सबसे अच्छा है। मुझे उपयोगकर्ता द्वारा चुने गए कुछ द्वारा "गोलाकार" होने की तारीख चाहिए। [कोड] input.property () का उपयोग करना। RoundFloorCopy() [/ code] ने बहुत से कस्टम कोडिंग को सहेजा। – DeezCashews

17

DateMidnight पर एक नज़र डालें।

DateTime startOfMonth = new DateTime(new DateMidnight(input.withDayOfMonth(1))); 

अद्यतन: 2013-08-16 JodaStephen द्वारा: Joda समय के संस्करण 2.3 DateMidnight deprecates के रूप में यह एक वर्ग का एक बहुत बुरा विचार था।

तो का उपयोग करें:

DateTime startOfMonth = input.withDayOfMonth(1).withTimeAtStartOfDay(); 
+0

तो मुझे लगता है कि आपका मतलब यह है: 'नई तिथि मिडनाइट (नई डेटटाइम())' –

+1

@ एरिक सच है, लेकिन आईएमएचओ डाउनवोट का कारण नहीं है। यह अभी भी एक अच्छा जवाब है –

+2

मुझे समझ में नहीं आता कि यह 'MillisOfDay (0) 'के उपयोग से बेहतर जवाब क्यों है। एक 'DateMidnight' ऑब्जेक्ट' डेटटाइम 'ऑब्जेक्ट नहीं है, इसलिए एक अतिरिक्त ऑब्जेक्ट को इस तरह से बनाया जाना चाहिए। –

38

वाक्य रचना को छोटा करने के withMillisOfDay() विधि का उपयोग करें।

 
DateTime startOfMonth = input.withDayOfMonth(1).withMillisOfDay(0); 
+0

बोझो का जवाब शायद "आधिकारिक" समाधान है, लेकिन मुझे यह बेहतर पसंद है। धन्यवाद। –

+0

आप ऐसा क्यों सोचेंगे? मुझे यह नहीं मिला। मुझे यह भी बेहतर पसंद है, क्योंकि इसे कम से कम वस्तुओं की आवश्यकता होती है। –

+0

मुझे ऐसा क्यों लगता है? क्योंकि इस सटीक प्रकार की समस्या के लिए एक समर्पित वर्ग मौजूद है। –

1

Joda समय भी DateTime प्रकार में withFields विधि का समर्थन करता है का उपयोग कर सकते हैं। यह भी एक छोटे से वाक्य रचना बनाने के लिए इस्तेमाल किया जा सकता है:

new DateTime().withDayOfMonth(1).withFields(new LocalTime(0, 0)); 

उत्पादन कोड में withFields को तर्क एक निरंतर के लिए बाहर कारक किया जाना चाहिए।

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