2017-06-15 9 views
6

के साथ लोकलडेट टाइम से तत्काल बनाएं, मेरे पास स्ट्रिंग प्रारूप ddMMyyyy और hh: mm और timeZone में डीबी में संग्रहीत दिनांक है। मैं उस जानकारी के आधार पर एक इंस्टेंट बनाना चाहता हूं, लेकिन मुझे नहीं पता कि यह कैसे करें।जावा 8 - टाइमज़ोन

कुछ

तरह
LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39); 
Instant instant = dateTime.toInstant(TimeZone.getTimeZone("ECT")); 
+0

क्या आपका मतलब है 'ZonedDateTime.ofInstant (तत्काल, TimeZone.getDefault()) '? – soorapadman

+1

@ सोरापैडमैन जो एक ज़ोनडेटडेट टाइम लौटाएगा। ओपी एक त्वरित चाहता है। –

+2

** समय क्षेत्र के लिए 3-4 वर्ण संक्षेपों का कभी भी उपयोग न करें। ** वे * वास्तविक समय क्षेत्र नहीं हैं, मानकीकृत नहीं हैं, और यहां तक ​​कि अद्वितीय भी नहीं! प्रारूप 'महाद्वीप/क्षेत्र' जैसे प्रारूप में [सत्य समय क्षेत्र नाम] (https://en.m.wikipedia.org/wiki/List_of_tz_database_time_zones) का उपयोग करें (https///en'] (https: //en.m। wikipedia.org/wiki/Europe/London), ['यूरोप/पेरिस'] (https://en.m.wikipedia.org/wiki/Europe/Paris), 'एशिया/कोलकाता', 'प्रशांत/ऑकलैंड'। यदि "ईसीटी" से आपका मतलब इक्वाडोर समय है, तो 'ZoneId.of ("America/Guayaquil") का उपयोग करें। यदि आप मध्य यूरोप का मतलब रखते हैं, तो उपयुक्त 'यूरोप/...' ज़ोन नाम का उपयोग करें। –

उत्तर

11

आप पहली बार बना सकते हैं एक उस समय क्षेत्र के साथ ZonedDateTime, और फिर कॉल toInstant:

LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 15, 13, 39); 
Instant instant = dateTime.atZone(ZoneId.of("Europe/Paris")).toInstant(); 
System.out.println(instant); // 2017-06-15T11:39:00Z 

मैं भी (तुलसी की सलाह के अनुसार पूर्ण समय क्षेत्र नाम का उपयोग करने के लिए बंद कर), क्योंकि यह कम संदिग्ध है।

+3

लगभग एक सही उत्तर है, लेकिन आपको 3-4 अक्षरों के छद्म-समय-क्षेत्र कोडों के उपयोग को प्रोत्साहित नहीं करना चाहिए। इसके बजाय 'महाद्वीप/क्षेत्र' प्रारूप में [सत्य समय क्षेत्र के नाम] (https://en.m.wikipedia.org/wiki/List_of_tz_database_time_zones) का उपयोग करें। मैं लेखक का अनुमान लगा रहा हूं * इक्विडोर टाइम * "ईसीटी" के लिए। 'ZoneId.of (" अमेरिका/ग्वायाकिल ")) –

+1

@ बेसिलबोरक" ईसीटी "वास्तव में यूरोपीय केंद्रीय समय (' यूरोप/पेरिस') है, इसलिए मैं देख सकता हूं कि पूरा नाम क्यों बेहतर होगा;) –

+2

मेरे पास केवल केंद्रीय यूरोपीय समय के रूप में "सीईटी" देखा। लेकिन यह बात है, ये 3-4 अक्षर कोड अस्पष्टता का दुःस्वप्न हैं, और प्लेग की तरह से बचा जाना चाहिए। –

4

पुरानी टाइमज़ोन कक्षा को भूलें। ZoneId का उपयोग करें, क्योंकि यह ठीक से थ्रेड-सुरक्षित है और आप ज़ोन को स्टोर करने के लिए केवल अंतिम स्थिर फ़ील्ड का उपयोग कर सकते हैं।

LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39); 
ZonedDateTime.of(dateTime, ZoneId.of("ECT")).toInstant(); 
-2

मुझे लगता है कि निम्नलिखित कोड काम करना चाहिए:

LocalDateTime time = LocalDateTime.of(2017, Month.JUNE, 15, 13, 39); 
    ZonedDateTime.of(time, TimeZone.getTimeZone("ZONE").toZoneId()).toInstant(); 

तुम बस समय क्षेत्र की जरूरत के साथ "जोन" को बदलने के लिए।

+4

नहीं, टाइमज़ोन विरासत वर्ग है, जो अब जोनआईडी और जोनऑफसेट द्वारा प्रदान किया जाता है। विरासत दिनांक-समय कक्षाओं से बचें। और निश्चित रूप से java.time कक्षाओं के साथ विरासत कक्षाओं मिश्रण नहीं है। कृपया अपना उत्तर सही करें या हटाएं। –