2010-01-28 10 views
8

[क्लाइंट-साइड GWT वर्ग]समय क्षेत्र/GWT (क्लाइंट-साइड)

मैं एक दिनांक वस्तु है ...

Date dataObject = DateTimeFormat.getFormat("yyyy-MM-dd'T'HH:mm:ss.SSS") 
         .parse("2009-10-12T00:00:00.000); 

यह ठीक काम करता है। लेकिन जब मैं करता हूँ एक:

dateObject.getTime(); 

यह एक यूनिक्स समय मिलीसेकंड डेलाइट सेविंग के साथ एक जीएमटी का उपयोग कर देता है, इसलिए यह एक यूनिक्स समय मैं उपयोग नहीं कर सकते बना रही है। मुझे यूटीसी में इसकी ज़रूरत है। मैं यह कैसे करु?


वर्तमान में मैं एक तारीख को पार्स कर रहा हूँ और यह मुझे वापस दे रहा है:

'Thu Apr 16 08:46:20 GMT+100 2009' @ '1239867980191' 

हालांकि तारीख मैं में गुजर रहा हूँ 1 घंटे इस समय (से भी कम है 07:46 और नहीं 8 : 46)।

मैं इस तथ्य को कैसे पार कर सकता हूं कि यह यूटीसी है? या यदि यह यूटीसी (जो हास्यास्पद होगा) का उपयोग नहीं कर सकता है, तो मैं डेलाइट बचत के बिना जीएमटी का उपयोग कैसे करूं?

+9

डेनलाइट बचत के साथ जीएमटी का उपयोग करके "यूनिक्स टाइम (इन) मिलीसेकंड" की कोई अवधारणा नहीं है। 'युग' के बाद से मिलीसेकंड की संख्या समाप्त हो गई है और जीएमटी और/या डेलाइट बचत से असंबंधित है। यदि आप डेलाइट सेविंग का उपयोग कर रहे हैं या नहीं या गलत तरीके से मिलीसेकंड में किसी अन्य प्रारूप में वापस परिवर्तित कर रहे हैं तो आप गलत तरीके से स्वरूपित समय स्ट्रिंग और/या सटीक रूप से भूल रहे हैं। लेकिन युग के बाद मिलीसेकंड की संख्या (जावा और यूनिक्स द्वारा और कई अन्य प्रौद्योगिकियों द्वारा उपयोग की जाती है) जीएमटी और डेलाइट बचत के लिए पूरी तरह से अज्ञेयवादी है। – SyntaxT3rr0r

+0

OldEnthusiast: यह एक जवाब होना चाहिए। –

+0

वैसे आप निश्चित रूप से दिन का पुरस्कार प्राप्त करते हैं। – Federer

उत्तर

5

आपका अंतिम संपादन चीजों को स्पष्ट बनाता है।

असल में, आप उलझन में हैं, और आप जो भी चाहते हैं उसे प्राप्त कर चुके हैं।

12398679801 9 1 मिलीसेकंड्स एपोक गुरुवार, 16 अप्रैल, 200 9 को जीएमटी समय क्षेत्र में 7: 46: 20.1 9 1 को अनुवाद करता है। उसी दिन तत्काल तत्काल अनुवाद होता है, लेकिन जीएमटी +01 समय क्षेत्र में 8: 46: 20.1 9 1। यदि आपकी इनपुट स्ट्रिंग निर्दिष्ट है "7: 46: 20.1 9 1" और आपको वास्तव में Date.getTime() से 12398679801 9 1 मिल गया तो बधाई हो, पार्सिंग कोड जीएमटी समय क्षेत्र में व्याख्या करने के लिए आपके "7: 46: 20.1 9 1" को समझ गया, और इसे ठीक से किया।

बाद में आपको प्रिंटिंग के दौरान "8:46:20" मिलता है, यह केवल इसलिए है क्योंकि आप उस तत्काल प्रदर्शित करने के लिए जीएमटी +01 समय क्षेत्र का उपयोग करते हैं। ध्यान दें कि स्ट्रिंग में GMT+100 ठीक से आपको सूचित करने के लिए है कि यह उस समय क्षेत्र का उपयोग प्रदर्शन उद्देश्यों के लिए करता है। तत्काल जो Date उदाहरण का प्रतिनिधित्व करता है फिर भी वह तत्काल तत्काल तत्काल है जिसे आप चाहते हैं। याद रखें कि Date उदाहरण समय में तत्काल प्रतिनिधित्व करता है, जिसके लिए समय क्षेत्र की कोई धारणा लागू नहीं होती है: समय क्षेत्र का उपयोग कैलेंडर तत्वों (दिन, घंटों ...) और पीछे में परिवर्तित करने के लिए किया जाता है।

एक प्रदर्शन योग्य स्ट्रिंग के लिए एक Date बदलने के लिए, DateTimeFormat.format(Date, TimeZone) आपके द्वारा निर्दिष्ट जो उस समय क्षेत्र है कि स्ट्रिंग के लिए उपयोग करना चाहते हैं देता है का उपयोग करें।

+0

+1 अच्छी स्पष्टीकरण के लिए और पॉइंटिंग 'DateTimeFormat.format (दिनांक, टाइमज़ोन)' –

+0

वाह, यह एक भ्रमित स्थिति रही है। ऐसा लगता है कि आप सही हैं। अतिरिक्त स्पष्टता के लिए धन्यवाद :) – Federer

-2

Calendar ऑब्जेक्ट का प्रयास करें।

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 
Date dataObject = DateTimeFormat.getFormat("yyyy-MM-dd'T'HH:mm:ss.SSS") 
        .parse("2009-10-12T00:00:00.000); 
cal.setTime(dataObject); 
cal.getTimeInMillis(); 

एपीआई के अनुसार, getTimeInMillis() देता है "युग से यूटीसी मिलीसेकेंड के रूप में वर्तमान समय।"

EDIT: _bravado ने बताया कि कैलेंडर एपीआई वर्तमान में जीडब्ल्यूटी (Issue 603) के लिए उपलब्ध नहीं है। हालांकि जावा एप्लिकेशन में उचित समय मिलेगा, यह यहां काम नहीं करेगा। जीएमटी का उपयोग करने के बारे में group में जानकारी है।

संपादित: Calendar.getInstance पर एक बंद कोष्ठक() फोन गुम

+6

मुझे नहीं लगता कि आप जीडब्ल्यूटी के साथ कैलेंडर का उपयोग कर सकते हैं? – Federer

+0

बहुत अच्छा मुद्दा। – justkt

3

के बाद से Calendar वर्ग GWT में समर्थित नहीं है, हो सकता है कुछ इस तरह hackish काम करेगा:

final String timezone = "GMT-07:00"; 
DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy-MM-dd'T'HH:mm:ssZZZZ"); 
long unix = dtf.parse("2009-10-12T00:00:00" + timezone).getTime(); 

इस तरह आप सही टाइमज़ोन जानकारी प्रदान कर सकते हैं - हालांकि, यह डिफ़ॉल्ट व्यवहार होना चाहिए।

+0

यह वही बात है जिसे मैं कोशिश कर रहा था। हालांकि मुझे बिल्कुल सही संयोजन नहीं मिला। मैंने सोचा होगा कि समय क्षेत्र कोड यूटीसी के लिए "यूटीसी" होगा? -7: 00 कैलिफ़ोर्निया या कुछ नहीं है? – Federer

+0

मैंने एक उदाहरण के रूप में 'जीएमटी -07: 00' 'जोड़ा है, आपको जो भी मूल्य आपके लिए काम कर रहा है उसे बदलना चाहिए;] (ताकि आपको "यूनिक्स टाइम मिलीसेकंड्स जीएमटी का उपयोग करके जीएमटी का उपयोग कर";) –

1

यह एक और तरीका है। एक Date उदाहरण यूटीसी समय पैमाने का उपयोग करते हुए एपोक के बाद मिलीसेकंड में समय रखता है (यानी लीप सेकंड अनदेखा कर रहे हैं)। यह Date.getTime() रिटर्न है और यही वह है जो आप चाहते हैं।

यहां अपराधी पार्सर है, जो आपके स्थानीय समय क्षेत्र में एक स्ट्रिंग के रूप में दी गई तारीख को समझता है। आप DateTimeFormat चाहते हैं एक तारीख और समय UTC समय क्षेत्र में दिए गए स्ट्रिंग व्याख्या करने के लिए, पार्स स्ट्रिंग के लिए एक स्पष्ट समय क्षेत्र संलग्न:

DateTimeFormat.getFormat("yyyy-MM-dd'T'HH:mm:ssZZZZ") 
    .parse("2009-10-12T00:00:00.000" + " GMT"); 

(ऊपर मानता है कि मैं GWT प्रलेखन ठीक से समझ में आ; मैंने कोशिश नहीं की है।)

बस मेरी टिप्पणियों में स्पष्ट होना: सभी व्यावहारिक उद्देश्यों के लिए, "जीएमटी" और "यूटीसी" के बीच कोई अंतर नहीं है, और जीएमटी समय क्षेत्र में कोई डेलाइट सेविंग नहीं है।अन्य समय क्षेत्रों को अक्सर "जीएमटी प्लस या माइनस ऑफसेट" के रूप में परिभाषित किया जाता है और ऑफसेट गर्मी और सर्दियों के बीच बदल सकता है। उदाहरण के लिए, न्यूयॉर्क में समय क्षेत्र कुछ हद तक गर्मियों में "जीएमटी -04" और सर्दियों में "जीएमटी -05" के बराबर है।

+0

I लगता है कि जीएमटी में स्वचालित रूप से डेलाइट बचत शामिल है - जो मैं नहीं चाहता हूं। मुझे सादा यूटीसी या सामान्य जीएमटी चाहिए। – Federer

+0

सही है - यह करता है। :( – Federer

+0

@_bravado: ऐसा नहीं है, इसलिए ब्रिटेन गर्मी में बीएसटी का उपयोग क्यों करता है। – Powerlord

0

मैं ज़ेडज़ेडजेड के साथ प्रारूपों को देख रहा हूं ... लेकिन क्यों?

"yyyy-MM-dd'T'HH: mm: ss.SSSZ" से मेल खाएंगे

"2009-10-12T00: 00: 00.000-0000"

अंतिम भाग ऑफसेट किया जा रहा यूटीसी से; कैलिफ़ोर्निया (किसी और के उदाहरण का समय उपयोग करने के लिए) -0800, -0700 गर्मियों में होगा।

एक साइड नोट के रूप में, जीएमटी हमेशा -0000 भी है। यही कारण है कि ब्रिटेन का ग्रीष्मकालीन समय क्षेत्र बीएसटी (ब्रिटिश ग्रीष्मकालीन समय, +0100) है।

+0

मैं यूटीसी में मौजूद फाइल से निकाले गए टाइमस्टैम्प में जा रहा हूं। मैं इसे पास कर रहा हूं आपके सुझावों के साथ - और यह इसे जीएमटी ग्रीष्मकाल में परिवर्तित कर रहा है - फिर भी। या तो आप जीडब्ल्यूटी क्लाइंट-साइड पर विचार नहीं कर रहे हैं या कुछ मेरे जीडब्ल्यूटी के साथ मूल रूप से गलत है - जो नवीनतम रिलीज है। – Federer

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

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