दिलचस्प पोस्ट
गोलंग: खराब प्रमाणपत्र के साथ एक https अनुरोध कैसे करें? VBA, ADO.Connection और क्वेरी पैरामीटर 1 9 80 से कंप्यूटिंग में महत्वपूर्ण नए आविष्कार Django staticfiles ऐप मदद जांचते हुए कि एक फ़ील्ड में स्ट्रिंग है जेजीआईटी: ट्यूटोरियल या साधारण उदाहरण नहीं मिल सकता JQuery में माउस पहिया ईवेंट प्राप्त करें? फ्लोटिंग पॉइंट नंबर की तुलना सी में कैसे खोजशब्द "उपयोग" PHP में काम करता है और मैं इसके साथ वर्गों को आयात कर सकता हूँ? एकल सरणी में बहुआयामी सरणी परिवर्तित करें मावेन अमान्य LOC शीर्षलेख (खराब हस्ताक्षर) क्यों स्ट्रिंग क्लास प्रतिलिपि निर्माता है? push_back बनाम emplace_back कैसे php में दोस्ताना यूआरएल बनाने के लिए? IOS में NSDictionary से JSON स्ट्रिंग जेनरेट करें

Java.time.LocalDateTime और java.util.Date के बीच परिवर्तित

जावा 8 की तिथि और समय के लिए पूरी तरह से नया API है इस एपीआई में सबसे उपयोगी वर्गों में से एक है LocalDateTime , LocalDateTime -स्वतंत्र दिनांक-समय-समय मान रखने के लिए।

इस प्रयोजन के लिए शायद java.util.Date वर्ग java.util.Date का उपयोग करके लाखों लाइन कोड हैं जैसे, जब पुराने और नए कोड के बीच अंतर होता है, तब दो के बीच परिवर्तित होने की आवश्यकता होगी। चूंकि ऐसा पूरा करने के लिए कोई सीधा तरीके नहीं लगता है, यह कैसे किया जा सकता है?

Solutions Collecting From Web of "Java.time.LocalDateTime और java.util.Date के बीच परिवर्तित"

संक्षिप्त जवाब:

 Date in = new Date(); LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault()); Date out = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant()); 

स्पष्टीकरण: ( LocalDate प्रश्न के बारे में इस प्रश्न के आधार पर)

इसके नाम के बावजूद, java.util.Date समय-रेखा पर एक तत्काल प्रतिनिधित्व करता है, न कि "दिनांक"। ऑब्जेक्ट में संग्रहित वास्तविक डेटा 1 970-01-01 -000: 00 जेड (1970 जीएमटी / यूटीसी की शुरुआत में आधी रात) से मिलीसेकेंड की long गिनती है।

JSR-310 में java.util.Date लिए समकक्ष वर्ग Instant , इस प्रकार इस प्रकार रूपांतरण प्रदान करने के लिए सुविधाजनक तरीके हैं:

 Date input = new Date(); Instant instant = input.toInstant(); Date output = Date.from(instant); 

एक java.util.Date उदाहरण में समय-क्षेत्र की कोई अवधारणा नहीं है। यह अजीब लग सकता है यदि आप toString() को java.util.Date पर कॉल करते हैं, क्योंकि toString एक टाइम-ज़ोन के सापेक्ष है। हालांकि यह विधि वास्तव में स्ट्रिंग प्रदान करने के लिए उड़ने पर जावा के डिफ़ॉल्ट टाइम-ज़ोन का उपयोग करती है। टाइम-ज़ोन java.util.Date की वास्तविक स्थिति का हिस्सा नहीं है।

एक Instant में समय-क्षेत्र के बारे में कोई जानकारी नहीं होती है इस प्रकार, किसी Instant से स्थानीय डेट-टाइम में कनवर्ट करने के लिए समय-क्षेत्र निर्दिष्ट करना आवश्यक है। यह डिफ़ॉल्ट क्षेत्र – ZoneId.systemDefault() – हो सकता है या यह समय-क्षेत्र हो सकता है कि आपका एप्लिकेशन नियंत्रण, जैसे उपयोगकर्ता प्राथमिकताओं से टाइम-ज़ोन। LocalDateTime में सुविधाजनक फैक्ट्री विधि है जो तुरंत और समय क्षेत्र दोनों लेती है:

 Date in = new Date(); LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault()); 

रिवर्स में, LocalDateTime टाइम टाइम ज़ोन को ज़ोन atZone(ZoneId) विधि पर कॉल करके निर्दिष्ट किया जाता है। ZonedDateTime फिर एक Instant करने के लिए सीधे परिवर्तित किया जा सकता है:

 LocalDateTime ldt = ... ZonedDateTime zdt = ldt.atZone(ZoneId.systemDefault()); Date output = Date.from(zdt.toInstant()); 

ध्यान दें कि LocalDateTime से LocalDateTime के रूपांतरण में अप्रत्याशित व्यवहार लागू करने की क्षमता है। यह इसलिए है क्योंकि डेलाइट सेविंग टाइम के कारण हर स्थानीय डेट-टाइम मौजूद नहीं है। शरद ऋतु / गिरावट में, स्थानीय समय-रेखा में एक ओवरलैप होता है जहां एक ही स्थानीय तिथि-समय दो बार होता है। वसंत में, एक अंतर है, जहां एक घंटे गायब हो जाता है। रूपांतरण क्या होगा की परिभाषा के लिए atZone(ZoneId) ऑफ़ atZone(ZoneId) को देखें

सारांश, यदि आप एक LocalDateTime लिए java.util.Date को राउंड-ट्रिप LocalDateTime और वापस java.util.Date तो आप डेलाइट सेविंग टाइम के कारण एक अलग LocalDateTime साथ समाप्त हो सकते हैं।

अतिरिक्त जानकारी: एक और अंतर है जो बहुत पुराने तिथियों को प्रभावित करेगा। java.util.Date एक कैलेंडर का उपयोग करता है, जो 15 अक्टूबर 1582 को होने वाली संभावनाओं का उपयोग करता है, इससे पहले की तारीखें, इससे पहले कि वह ग्रेगरीयन के बजाय जूलियन कैलेंडर का उपयोग करता है इसके विपरीत, java.time.* सभी समय के लिए आईएसओ कैलेंडर प्रणाली (ग्रेगोरियन के बराबर) का उपयोग करता है। अधिकांश उपयोग मामलों में, आईएसओ कैलेंडर सिस्टम वह है जिसे आप चाहते हैं, लेकिन साल 1582 से पहले की तारीखों की तुलना करते समय आप अजीब प्रभाव देख सकते हैं।

यह है कि मैं किसके साथ आया था (और सभी तिथि समय के संयोजनों की तरह यह शायद कुछ अजीब टाइमज़ोन-लीपियर-डेलाइट समायोजन के आधार पर अस्वीकृत हो रहा है: डी)

गोल-ट्रिपिंग: Date << – >> LocalDateTime

दिये गए: Date date = [some date]

(1) LocalDateTime << Instant << Date

  Instant instant = Instant.ofEpochMilli(date.getTime()); LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneOffset.UTC); 

(2) Date << Instant << LocalDateTime

  Instant instant = ldt.toInstant(ZoneOffset.UTC); Date date = Date.from(instant); 

उदाहरण:

दिया हुआ:

 Date date = new Date(); System.out.println(date + " long: " + date.getTime()); 

(1) LocalDateTime << Instant << Date :

Date से Instant बनाएं:

 Instant instant = Instant.ofEpochMilli(date.getTime()); System.out.println("Instant from Date:\n" + instant); 

Instant से Date बनाएं (आवश्यक नहीं, बल्कि चित्रण के लिए):

 date = Date.from(instant); System.out.println("Date from Instant:\n" + date + " long: " + date.getTime()); 

Instant से LocalDateTime बनाएं

 LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneOffset.UTC); System.out.println("LocalDateTime from Instant:\n" + ldt); 

(2) Date << Instant << LocalDateTime

LocalDateTime से Instant बनाएं:

 instant = ldt.toInstant(ZoneOffset.UTC); System.out.println("Instant from LocalDateTime:\n" + instant); 

Instant से Date बनाएं:

 date = Date.from(instant); System.out.println("Date from Instant:\n" + date + " long: " + date.getTime()); 

आउटपुट है:

 Fri Nov 01 07:13:04 PDT 2013 long: 1383315184574 Instant from Date: 2013-11-01T14:13:04.574Z Date from Instant: Fri Nov 01 07:13:04 PDT 2013 long: 1383315184574 LocalDateTime from Instant: 2013-11-01T14:13:04.574 Instant from LocalDateTime: 2013-11-01T14:13:04.574Z Date from Instant: Fri Nov 01 07:13:04 PDT 2013 long: 1383315184574 

अधिक सुविधाजनक तरीके से यदि आप निश्चित हैं कि आपको एक डिफ़ॉल्ट समयक्षेत्र चाहिए:

 Date d = java.sql.Timestamp.valueOf( myLocalDateTime ); 

निम्नलिखित एपीआई लोकलडेटटाइम में java.util.date में परिवर्तित करते समय काम करने लगता है:

 Date.from(ZonedDateTime.of({time as LocalDateTime}, ZoneId.systemDefault()).toInstant()); 

रिवर्स रूपांतरण हो सकता है (उम्मीद है) समान तरीके से प्राप्त किया जा सकता है …

आशा करता हूँ की ये काम करेगा…

सब कुछ यहां है: http://blog.progs.be/542/date-to-java-time

"गोल-ट्रिपिंग" के साथ जवाब सटीक नहीं है: जब आप करते हैं

 LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneOffset.UTC); 

यदि आपका सिस्टम समयक्षेत्र UTC / GMT नहीं है, तो आप समय बदलते हैं!

मुझे यकीन नहीं है कि यह सबसे आसान या सबसे अच्छा तरीका है, या अगर कोई नुकसान है, लेकिन यह काम करता है:

 static public LocalDateTime toLdt(Date date) { GregorianCalendar cal = new GregorianCalendar(); cal.setTime(date); ZonedDateTime zdt = cal.toZonedDateTime(); return zdt.toLocalDateTime(); } static public Date fromLdt(LocalDateTime ldt) { ZonedDateTime zdt = ZonedDateTime.of(ldt, ZoneId.systemDefault()); GregorianCalendar cal = GregorianCalendar.from(zdt); return cal.getTime(); }