2011-07-20 15 views
7

मुझे अलग-अलग समय क्षेत्रों में दो तिथियों के बीच समय अंतर प्राप्त करने की आवश्यकता है। वर्तमान में मैं यह कर रहा हूं:Android एंड्रॉइड में दो समय क्षेत्रों के बीच समय अंतर कैसे प्राप्त करें?

Calendar c1=Calendar.getInstance(TimeZone.getTimeZone("EDT")); 
Calendar c2=Calendar.getInstance(TimeZone.getTimeZone("GMT")); 
String diff=((c2.getTimeInMillis()-c1.getTimeInMillis())/(1000*60*60))+" hours"; 
new AlertDialog.Builder(this).setMessage(diff).create().show(); 

मुझे 0 घंटे मिलते हैं। मैं क्या गलत कर रहा हूं?

उत्तर

11

getTimeInMillis() यूटीसी में युग के बाद मिलीसेकंड की संख्या देता है। दूसरे शब्दों में, समय क्षेत्र इसके लिए अप्रासंगिक है।

मैं आपको संदेह वास्तव में चाहते हैं:

long currentTime = System.currentTimeMillis(); 
int edtOffset = TimeZone.getTimeZone("EDT").getOffset(currentTime); 
int gmtOffset = TimeZone.getTimeZone("GMT").getOffset(currentTime); 
int hourDifference = (gmtOffset - edtOffset)/(1000 * 60 * 60); 
String diff = hourDifference + " hours"; 
+0

और डेलाइट सेविंग के मामले में क्या? क्या यह इसे संभालेगा? – Gugan

+1

@ गुगन: मुझे नहीं पता कि क्या होगा यदि आप समय क्षेत्र के नाम के लिए संक्षेप का उपयोग करते हैं - लेकिन यदि आप इसे 'यूरोप/लंदन' जैसे पूर्णकालिक क्षेत्र आईडी देते हैं, तो यह वास्तव में डेलाइट सेविंग को संभालेगा। –

+0

धन्यवाद जॉन। मैं इसकी जांच करूंगा। – Gugan

0

जॉन करीब है, लेकिन चरित्र प्रतिबंधों की वजह से मैं उसकी जवाब संपादित नहीं कर सकते। यह वही कोड है लेकिन पूर्वी मानक समय के लिए "ईडीटी" के साथ "ईएसटी" में बदल दिया गया है।

long currentTime = System.currentTimeMillis(); 
int edtOffset = TimeZone.getTimeZone("EST").getOffset(currentTime); 
int gmtOffset = TimeZone.getTimeZone("GMT").getOffset(currentTime); 
int hourDifference = (gmtOffset - edtOffset)/(1000 * 60 * 60); 
String diff = hourDifference + " hours"; 

लेकिन इस समाधान एक प्रमुख धारणा है कि TimeZone.getAvailableIDs() के भीतर की स्ट्रिंग सरणी दोनों "ईएसटी" और "GMT" है बनाता है। यदि उस विधि में उन टाइमज़ोन स्ट्रिंग्स नहीं हैं तो यह 0 ऑफसेट के रूप में वापस आ जाएगा।

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