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 के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है।