java - समय अंतर पाने के लिए 2 कैलेंडर वर्ग के उदाहरणों का उपयोग करना




calendar timezone (2)

मैं अपने अनुप्रयोग में एक समस्या का प्रयास करने और समझने के लिए जावा में कैलेंडर लाइब्रेरी का उपयोग कर रहा हूं:

मेरे पास दो कैलेंडर उदाहरण हैं, depart और arrive

depart शनिवार शाम 5:35 बजे , शिकागो से 7/15/2015 पर जा रहा है, जबकि बर्लिन, जर्मनी में 7/16/15 बजे 9:50 बजे उतरा है।

यात्रा अवधि प्रदर्शित करने के लिए मेरा वर्तमान कोड है:

    Calendar depart = Calendar.getInstance();       
    Calendar arrive = Calendar.getInstance();

    depart.setTimeZone(TimeZone.getTimeZone("America/Chicago"));
    arrive.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));

    depart.set(Calendar.MONTH, 6);
    depart.set(Calendar.DAY_OF_MONTH, 15);
    depart.set(Calendar.HOUR_OF_DAY, 17);
    depart.set(Calendar.MINUTE, 35);

    arrive.set(Calendar.MONTH, 6);
    arrive.set(Calendar.DAY_OF_MONTH, 16);
    arrive.set(Calendar.HOUR_OF_DAY, 9);
    arrive.set(Calendar.MINUTE, 50);

System.out.println("Depart: " + depart.getTime() + "\nArrive: " + arrive.getTime());

long hours = (arrive.getTimeInMillis() - depart.getTimeInMillis()) / (1000*60*60);
long minutes = (arrive.getTimeInMillis() - depart.getTimeInMillis()) / (1000*60) - (hours*60);

System.out.println("Flight duration: " + hours + " hours" + " " + minutes + " minutes");`

और परिणाम है:

Depart: Wed Jul 15 17:35:53 CDT 2015 Arrive: Thu Jul 16 02:50:53 CDT 2015 Flight duration: 9 hours 15 minutes

... लेकिन मुझे परिणाम होने की आवश्यकता है:

Depart: Wed Jul 15 17:35:53 CDT 2015 Arrive: Thu Jul 16 **09:50:53 Central European Timezone** 2015 Flight duration: 9 hours 15 minutes

मुझे दोनों को विदा करने और पहुंचने की जरूरत है ताकि वे अपना स्थानीय समय प्रदर्शित कर सकें, लेकिन फिर भी 9 घंटे और 15 मिनट की सही यात्रा अवधि की रिपोर्ट करें।


आप DateFormat s का प्रयोग कर सकते हैं ताकि आप अपनी तिथियां अपनी इच्छानुसार पेश कर सकें:

DateFormat departDF = DateFormat.getDateTimeInstance(
    DateFormat.LONG, DateFormat.LONG, Locale.US
);
departDF.setTimeZone(depart.getTimeZone());
System.out.println(departDF.format(depart.getTime()));
DateFormat arriveDF = DateFormat.getDateTimeInstance(
    //                                change to US if you want them homologated
    //                                it won't change the time zone info or date/time
    DateFormat.LONG, DateFormat.LONG, Locale.GERMANY
);
arriveDF.setTimeZone(arrive.getTimeZone());
System.out.println(arriveDF.format(arrive.getTime()));

उत्पादन

July 15, 2015 5:35:43 PM CDT
16. Juli 2015 09:50:43 CEST

आप एक Date इंस्टैंस प्राप्त करने के लिए getTime() को बुला रहे हैं, और फिर getTime() को उस पर कॉल करने पर, निहित - जो हमेशा सिस्टम स्थानीय समय क्षेत्र का उपयोग करेगा

आप SimpleDateFormat का उपयोग करना चाहते हैं ताकि आप स्वरूपण के लिए उपयोग किए गए टाइम ज़ोन को नियंत्रित कर सकें। उदाहरण के लिए:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm z", Locale.US);
formatter.setTimeZone(depart.getTimeZone());
System.out.println("Depart: " + formatter.format(depart.getTime()));
formatter.setTimeZone(arrive.getTimeZone());
System.out.println("Arrive: " + formatter.format(arrive.getTime()));






timezone