2012-01-25 17 views
7

मैं दिनांक और कैलेंडर वर्गों का उपयोग जावा में दो दिनांक/समय के बीच अंतर की गणना करना चाहते हैं। मेरे पास प्रारूप "2012-01-24 12:30:00 अपराह्न" है।की गणना दिनांक/समय अंतर पर विचार AM/PM

मैं अपने ही विधि को लागू किया है और यह भी अन्य लोगों के साथ काम करने के लिए यह गूगल, लेकिन सही संकेत बजे से अपराह्न मानों का प्रबंधन कैसे नहीं मिल रहा है।

दिनांक/समय अंतर परेशान हो गया, जब भी समय उस में 12 (AM/PM) है। उदाहरण के लिए यदि मेरे पास दिनांक/समय है "2012-01-24 12:30:00 अपराह्न" और "2012-01-24 02:30:00 अपराह्न" यह दर्शाता है कि अंतर 10 घंटे है।

this link पर कोड कैसे यह AM और PM को संभालने के लिए संशोधित किया जा सकता ध्यान में रखते हुए।

तिथि में स्ट्रिंग तारीख बदलने के लिए मैं कोड निम्न का उपयोग करें:

String sessionTimeStart = "2012-01-24 12:30:00 PM"; 
    String sessionTimerEndOrCurrent = "2012-01-24 02:30:00 PM"; 
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 

    Date d1 = null; 
    Date d0 = null; 
    try { 
     d1 = format.parse(sessionTimeStart); 
     d0 = format.parse(sessionTimerEndOrCurrent); 
    } catch (ParseException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
+0

आप स्ट्रिंग को 'दिनांक' ऑब्जेक्ट में कैसे परिवर्तित करते हैं? और आप अंतर की गणना कैसे करते हैं? यदि आप लिंक किए गए कोड का उपयोग करते हैं, तो आप इसे कैसे कॉल करते हैं? – Thomas

+0

@ थॉमस मैंने आपके सुझाव @his के लिए धन्यवाद – rizzz86

उत्तर

6

समस्या अपनी तिथि प्रारूप है।

HH दिन (0-23) में दिन होगा और hh एएम/पीएम (1-12) में घंटे होगा। इस प्रकार आपके दिनांक प्रारूप 02:30:00 के साथ ही पीएम संस्करण में परिवर्तित होने की बजाय पार्स किया जाएगा (जो दिन के घंटे में 14:30:00 होगा)।

+0

गायब हूं, मुझे लगता है कि आप सही @ थॉमस हैं। मैं इसे 'एचएच' में बदलने की कोशिश करूंगा और अपने सभी मामलों का परीक्षण करूंगा। – rizzz86

1

यह अपने आप का निर्माण नहीं है, एक स्थापित पुस्तकालय का उपयोग करें। Jodatime व्यापक रूप से उपयोग किया जाता है।

+0

अपडेट किया है। लेकिन जैसा कि मैंने उल्लेख किया है मुझे तारीख और कैलेंडर कक्षाओं का उपयोग करना है। – rizzz86

1

onsider Apache Commons DateUtils DurationFormatUtils formatPeriod पद्धति का उपयोग करके जादू करेंगे।

शुभकामनाएं!

संपादित यह मानते हुए कि आप की तारीख एक और दिनांक ख इस बिंदु पर प्रारंभ है,

String format="HH:mm:ss.SSS"; // whatever you wish 
boolean padWithZeros=true; // whatever you wish 
TimeZone timezone=null; // whatever you wish 
long timeA = a.getTime(); 
long timeB = b.getTime(); 

String period = DurationFormatUtils.formatPeriod(timeB, timeA, format, padWithZeros, timezone); 
+0

आपके सुझाव @aviad के लिए धन्यवाद। लेकिन जैसा कि मैंने उल्लेख किया है मुझे तारीख और कैलेंडर कक्षाओं का उपयोग करना है। – rizzz86

+0

@ rizzz86, मेरा संपादन देखें। – aviad

-1

कैलेंडर एक methode ऐड() वह भी substracting के लिए इस्तेमाल किया जा सकता है। इस पर एक नज़र मारो। आपको तारीख के बजाय कैलेंडर का उपयोग करना चाहिए क्योंकि अधिकांश दिनांक संचालन बहिष्कृत हैं।

+1

प्रश्न तुलना के बारे में नहीं अंतर की गणना करने के बारे में था। – aviad

+0

क्षमा करें, मैंने एपीआई को गलत समझा। विचार तुलना करने के लिए() मिलीसेकंड में अंतर वापस कर देगा। –

+0

एक और समाधान मिला। शायद इस बार सही ;-) –

3

तो, क्या आपके पास ये तिथियां स्ट्रिंग के रूप में हैं? उन्हें उचित प्रारूप स्ट्रिंग के साथ एक SimpleDateFormat साथ पार्स, और घंटों में अंतर का परिकलन:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a"); 

Date d1 = df.parse("2012-01-24 12:30:00 PM"); 
Date d2 = df.parse("2012-01-24 02:30:00 PM"); 

int hoursDifference = (int)((d2.getTime() - d1.getTime())/3600000L); 
System.out.println("Difference in hours: " + hoursDifference); 

आपका त्रुटि है कि आप एचएच (24 घंटे घंटे) का उपयोग कर रहे hh (12 घंटे के बजाय घंटे) आपके प्रारूप स्ट्रिंग में। बजाय yyyy-MM-dd HH:mm:ss a उपयोग yyyy-MM-dd hh:mm:ss a:

+0

धन्यवाद @ जेस्पर, मैं भी आपके समाधान का प्रयास करूंगा। लेकिन एचएच और एचएच ऐसा लगता है कि मैं यहां – rizzz86

4

कारण यह 10 घंटे दिखाता है कि अंतर यह है कि इनपुट को पार्स करते समय आपको पैटर्न में त्रुटि मिली है।

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 

Date date1 = df.parse("2012-01-24 12:30:00 PM"); 
Date date2 = df.parse("2012-01-24 02:30:00 PM"); 

long differenceInHours = Math.abs(date1.getTime() - date2.getTime())/1000/60/60); 

वापसी करेंगे 10:

यहाँ एक उदाहरण SimpleDateFormat का उपयोग कर रहा है।

जब हम बस थोड़ा सा दिनांक स्वरूप पैटर्न HH के बजाय दिन में एक घंटे के लिए बदलने के लिए, AM/PM (1-12) में एक घंटे के लिए hh का उपयोग कर (0-23):

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a"); 

यह रिटर्न (अपेक्षित) 2

अपने पैटर्न को सही बनाने के लिए documentation for SimpleDateFormat देखें।

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