2012-06-25 16 views
5

मुझे एंड्रॉइड फोन (नेक्सस वन) और जावा सर्वर के बीच एक समय रूपांतरण के साथ कुछ परेशानी हो रही है। मैंने जो कुछ भी पढ़ा है, वह कहता है कि वे वही हैं, लेकिन जब मैं एक लंबे समय के स्टैम्प को परिवर्तित कर रहा हूं, तो मुझे 1 घंटा (बिल्कुल) खोना प्रतीत होता है।एंड्रॉइड टाइम बनाम जावा टाइम

विशेष रूप से, अगर मैं Android डिवाइस मैं निम्नलिखित आउटपुट प्राप्त का निम्न कोड को चलाने

कोड:

Calendar g = Calendar.getInstance(); 
g.setTimeInMillis(1340661899000L); 
Log.d(TAG, g.getTime().toLocaleString()); 

आउटपुट: जून 25, 2012 06:04:59

जो मुझे लगता है कि सही है, लेकिन जब मैं जावा सर्वर पर सटीक कोड चलाता हूं तो मुझे उसी दिन मिलता है लेकिन 1 घंटा पहले

कोड:

Calendar g = Calendar.getInstance(); 
g.setTimeInMillis(1340661899000L); 
System.out.println(g.getTime().toLocaleString()); 

आउटपुट: 25 जून 2012 17:04:59

किसी को भी यह क्या कारण हो सकता है पता है? दोनों सर्वर विज्ञापन फोन एक ही स्थान पर स्थित हैं (यह महत्वपूर्ण नहीं है) और सर्वर बॉक्स और फोन दोनों पर घड़ियों

+1

आप क्लाइंट और सर्वर के बीच संचार में स्थानीयकृत समय का उपयोग नहीं करना चाहते हैं, क्योंकि आप यह सुनिश्चित नहीं कर सकते कि ग्राहक पर समय लोकेल क्या होगा। –

+0

मूल्य 1340661899000L स्थानीय समय नहीं होना चाहिए, मैं सिर्फ यह प्रदर्शित करना चाहता हूं कि डिवाइस टाइमज़ोन –

+2

में दिया गया समय क्या होगा, क्लाइंट और सर्वर दोनों एक ही समय क्षेत्र/मोड में होने की अपेक्षा करते हुए मैं आपको सलाह देने का सुझाव दे रहा था। –

उत्तर

4

ध्यान में रखते हुए कि यह एक घंटे का अंतर है, क्या आप संभवतः डीएसटी (डेलाइट बचत समय) सर्वर पर सेट है, न कि फोन पर या इसके विपरीत?

+0

ठीक है अब मैं सिर्फ एक मूर्खता की तरह महसूस करता हूं। हां, किसी कारण से, लोकालेस्ट्रिंग का फोन संस्करण डीएसटी को खाते में नहीं ले रहा था, भले ही फोन की घड़ी सही समय थी। –

+0

@ जॉन्स यह एक उदाहरण है कि आपको स्थानीय दिनांक-समय मूल्यों में काम करने से क्यों बचना चाहिए। [यूटीसी] (http://en.m.wikipedia.org/wiki/Coordinated_Universal_Time) में कुछ डेटा अपवादों के साथ अपने डेटा संचार, व्यवसाय तर्क, डेटा संग्रहण और सर्वर घड़ी को रखें। स्थानीय समय-क्षेत्र में कनवर्ट करें-केवल तभी समायोजित जब उपयोगकर्ता या आपके डेटा के उपभोक्ता द्वारा अपेक्षित। –

1

क्रिस क्या कहने का प्रयास कर रहा है कि आपका फोन और सर्वर अलग-अलग समय क्षेत्र में कॉन्फ़िगर किया जा सकता है।

cal.getTimeZone() के परिणाम छपाई का प्रयास करें। यह मुद्दा होना चाहिए कि आप संचार के लिए उपयोग करने के लिए एक समय क्षेत्र चुनना चाहते हैं।

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+0")); 

Javadocs कैलेंडर उदाहरणों द्वारा रिपोर्ट डिफ़ॉल्ट समय क्षेत्र का उपयोग करने के अनुसार:: उदाहरण के लिए

TimeZone.getDefault() 

अपने सर्वर के बावजूद और मोबाइल एक ही समय क्षेत्र पर सेट किया जा रहा जरूरी वे एक ही कहने का मतलब नहीं हो सकता है डिफ़ॉल्ट टाइमज़ोन।

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