tl; डॉ
myUtilDate.toInstant() // Convert `java.util.Date` to `Instant`.
.atOffset( ZoneOffset.UTC ) // Transform `Instant` to `OffsetDateTime`.
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // Generate a String.
.replace( "T" , " " ) // Put a SPACE in the middle.
2014-11-14 14:05:09
java.time
आधुनिक तरीका java.time वर्गों के साथ है जो अब पुरानी पुरानी विरासत तारीख-समय की कक्षाओं को दबा देते हैं।
सबसे पहले अपने कन्वर्ट java.util.Dateएक करने के लिए Instant। Instantकक्षा में समय रेखा पर एक पल का प्रतिनिधित्व करता यूटीसी के एक संकल्प के साथ नैनोसेकंड (नौ (9) एक दशमलव भिन्न के अंकों के लिए)।
Java.time से / से बातचीत पुरानी कक्षाओं में जोड़े गए नए तरीकों द्वारा की जाती है।
Instant instant = myUtilDate.toInstant();
दोनों अपने java.util.Dateऔर java.time.Instantमें हैं यूटीसी । यदि आप UTC के रूप में दिनांक और समय देखना चाहते हैं, तो ऐसा ही हो। toStringमानक ISO 8601 प्रारूप में एक स्ट्रिंग उत्पन्न करने के लिए कॉल करें ।
String output = instant.toString();
2014-11-14T14: 05: 09Z
अन्य प्रारूपों के लिए, आपको अपने Instantऔर अधिक लचीले में बदलने की जरूरत है OffsetDateTime।
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
odt.toString (): 2020-05-01T21: 25: 35.957Z
उस कोड को IdeOne.com पर लाइव देखें ।
अपने इच्छित प्रारूप में स्ट्रिंग प्राप्त करने के लिए, एक निर्दिष्ट करें DateTimeFormatter। आप एक कस्टम प्रारूप निर्दिष्ट कर सकते हैं। लेकिन मैं पूर्वनिर्धारित फॉर्मेटर्स ( ISO_LOCAL_DATE_TIME) में से एक का उपयोग करता हूं , और Tइसके आउटपुट को स्पेस के साथ बदल देता हूं ।
String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " );
2014-11-14 14:05:09
वैसे मैं इस तरह के प्रारूप की अनुशंसा नहीं करता हूं जहां आप जानबूझकर ऑफसेट-यूटीसी या समय क्षेत्र की जानकारी खो देते हैं। उस स्ट्रिंग की तिथि-समय मान के अर्थ के अनुसार अस्पष्टता बनाता है।
डेटा हानि से भी सावधान रहें, क्योंकि आपके स्ट्रिंग के दिनांक-समय मान का प्रतिनिधित्व करने में किसी भी भिन्न द्वितीय को अनदेखा किया जा रहा है (प्रभावी रूप से छोटा)।
किसी विशेष क्षेत्र की दीवार-घड़ी के समय के लेंस के माध्यम से उसी क्षण को देखने के लिए , ए ZoneIdको प्राप्त करने के लिए आवेदन करें ZonedDateTime।
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
zdt.toString (): 2014-11-14T14: 05: 09-05: 00 [अमेरिका / मॉन्ट्रियल]
एक स्वरूपित स्ट्रिंग उत्पन्न करने के लिए, ऊपर जैसा ही करें लेकिन odtसाथ बदलें zdt।
String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " );
2014-11-14 14:05:09
यदि इस कोड को बहुत बड़ी संख्या में निष्पादित किया जाता है, तो आप थोड़ा अधिक कुशल होना चाहते हैं और कॉल से बच सकते हैं String::replace। उस कॉल को छोड़ने से आपका कोड छोटा हो जाता है। यदि वांछित है, तो अपने स्वयं के DateTimeFormatterऑब्जेक्ट में अपने स्वयं के स्वरूपण पैटर्न निर्दिष्ट करें । इस उदाहरण को पुन: उपयोग के लिए एक स्थिर या सदस्य के रूप में कैश करें।
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ); // Data-loss: Dropping any fractional second.
उदाहरण प्रस्तुत करके उस फ़ॉर्मेटर को लागू करें।
String output = zdt.format( f );
जावा के बारे में
Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं जैसे परेशानी पुराने तिथि-समय वर्गों को प्रतिस्थापित java.util.Date, .Calendar, और java.text.SimpleDateFormat।
Joda समय परियोजना, अब में रखरखाव मोड , प्रवास java.time को सलाह देता है।
अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें।
Java.time कार्यक्षमता की ज्यादातर में जावा 6 और 7 के लिए वापस भेजा जाता है ThreeTen-backport और आगे के लिए अनुकूलित एंड्रॉयड में ThreeTenABP (देखें कैसे उपयोग करने के लिए ... )।
ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है।