2009-08-11 11 views
20

मेरे पास वर्तमान में दो UI घटक हैं जो दिनांक और समय निर्दिष्ट करने के लिए उपयोग किए जाते हैं। दोनों घटक java.util.Date क्रमशः कैलेंडर दिनांक और समय का प्रतिनिधित्व करने वाले उदाहरण लौटाते हैं। मेरा सवाल है:java.util.Dates को डेट-टाइम बनाने के लिए दिनांक

java.util.Date उदाहरण दिनांक और समय का प्रतिनिधित्व करने के लिए इन मानों को गठबंधन करने का सबसे अच्छा तरीका क्या है? मैं जोडा या अन्य तृतीय पक्ष पुस्तकालयों पर निर्भरताओं से बचना चाहता हूं।

मेरे वर्तमान समाधान इस तरह दिखता है (लेकिन वहाँ है एक बेहतर तरीका?):

Date date = ... // Calendar date 
Date time = ... // Time 

Calendar calendarA = Calendar.getInstance(); 
calendarA.setTime(date); 

Calendar calendarB = Calendar.getInstance(); 
calendarB.setTime(time); 

calendarA.set(Calendar.HOUR_OF_DAY, calendarB.get(Calendar.HOUR_OF_DAY)); 
calendarA.set(Calendar.MINUTE, calendarB.get(Calendar.MINUTE)); 
calendarA.set(Calendar.SECOND, calendarB.get(Calendar.SECOND)); 
calendarA.set(Calendar.MILLISECOND, calendarB.get(Calendar.MILLISECOND)); 

Date result = calendarA.getTime(); 
+0

यह उतना अच्छा है जितना आप उचित API का उपयोग किए बिना प्राप्त करेंगे। – skaffman

+3

मुझे लगता है कि यह * क्यों * तीसरे पक्ष की तारीख/समय पुस्तकालय मौजूद हैं :-( –

+0

हमम ... धन्यवाद - मुझे यही संदेह है। – Adamski

उत्तर

15
public Date dateTime(Date date, Date time) { 
    return new Date(
        date.getYear(), date.getMonth(), date.getDay(), 
        time.getHours(), time.getMinutes(), time.getSeconds() 
        ); 
} 

आप अपने समाधान प्राप्त करने के कैलेंडर में इस पदावनत कोड corvert कर सकते हैं।

तब मेरे जवाब है: नहीं, तुम Joda

एनबी का उपयोग किए बिना बेहतर नहीं कर सकते

jodatime जल्द ही JSR 310

+3

हालांकि मैं मानता हूं कि इसका उपयोग नहीं किया जाना चाहिए, लेकिन अगर कोई ऐसा करता है, तो शायद आपको इसे ठीक करना चाहिए। 'date.getDay() 'सप्ताह में दिन लौटाता है। यहां आपको' day.getDate() ' – medopal

+0

की आवश्यकता होगी मैं @medopal से सहमत हूं, इस समाधान का उपयोग ओपीएस समाधान पर नहीं किया जाना चाहिए। – Clarkey

+0

कृपया बोल्ड में चिह्नित करें ** यह deprec है एटेड कोड: इसका उपयोग न करें ** –

4

मुझे लगता है कि आप कर रहे हैं दृष्टिकोण का सबसे अच्छा आप Joda समय का उपयोग किए बिना हासिल कर सकते हैं है। SimpleDateFormats का उपयोग करने वाला एक समाधान कम लाइनों का उपयोग कर सकता है, लेकिन वास्तव में आपको कोई लाभ नहीं दे रहा है।

+2

बहिष्कृत नहीं किया गया है मुझे स्पष्ट करें कि इस उत्तर में क्या एक डाउनवोट के योग्य है। क्या कोई भी समझाएगा? –

+0

-1: प्रश्न स्पष्ट रूप से बताता है कि जोदा समय की निर्भरता वांछित नहीं है। इसलिए यह प्रश्न का उत्तर नहीं है। यह उल्लेखनीय लायक है, यह एक टिप्पणी से संबंधित है IMHO - पूरी तरह से उत्तर नहीं दिया गया। – Atmocreations

2

कैलेंडर

का उपयोग के साथ मानकीकृत किया जाएगा
public Date dateTime(Date date, Date time) { 

    Calendar aDate = Calendar.getInstance(); 
    aDate.setTime(date); 

    Calendar aTime = Calendar.getInstance(); 
    aTime.setTime(time); 

    Calendar aDateTime = Calendar.getInstance(); 
    aDateTime.set(Calendar.DAY_OF_MONTH, aDate.get(Calendar.DAY_OF_MONTH)); 
    aDateTime.set(Calendar.MONTH, aDate.get(Calendar.MONTH)); 
    aDateTime.set(Calendar.YEAR, aDate.get(Calendar.YEAR)); 
    aDateTime.set(Calendar.HOUR, aTime.get(Calendar.HOUR)); 
    aDateTime.set(Calendar.MINUTE, aTime.get(Calendar.MINUTE)); 
    aDateTime.set(Calendar.SECOND, aTime.get(Calendar.SECOND)); 

    return aDateTime.getTime(); 
} 
संबंधित मुद्दे