tl; डॉ
Instant.now() // Capture the current moment in UTC.
उस मूल्य का प्रतिनिधित्व करने के लिए एक स्ट्रिंग उत्पन्न करें:
Instant.now().toString()
2016-09-13T23: 30: 52.123Z
विवरण
के रूप में जॉन स्कीट द्वारा सही जवाब में कहा गया है, एक java.util.Date वस्तु है कोई समय क्षेत्र † । लेकिन इसका toString
कार्यान्वयन उस तिथि-समय मान के स्ट्रिंग प्रतिनिधित्व को उत्पन्न करते समय JVM के डिफ़ॉल्ट समय क्षेत्र पर लागू होता है। भोले-भाले प्रोग्रामर के साथ डेट करने से लगता है कि एक टाइम ज़ोन है लेकिन ऐसा नहीं है।
java.util.Date
, j.u.Calendar
, और java.text.SimpleDateFormat
जावा के साथ बंडल कक्षाएं बेहद परेशानी में हैं। इनसे बचें। इसके बजाय, इन सक्षम तिथि-समय पुस्तकालयों में से किसी एक का उपयोग करें:
java.time (जावा 8)
Java 8 एक उत्कृष्ट नया java.time लाता है । * पुराने java.util.Date/Calendar कक्षाओं को दबाने के लिए पैकेज ।
UTC / GMT में वर्तमान समय प्राप्त करना एक सरल ...
Instant instant = Instant.now();
यही कारण है कि Instant
वर्ग java.time में मूल निर्माण खंड, में समय रेखा पर एक पल का प्रतिनिधित्व करता है यूटीसी के एक संकल्प के साथ नैनोसेकंड ।
जावा 8 में, वर्तमान क्षण केवल मिलीसेकंड रिज़ॉल्यूशन तक कैप्चर किया गया है। जावा 9Clock
आपके मेजबान कंप्यूटर की क्लॉक हार्डवेयर की क्षमता के आधार पर, इस वर्ग की पूर्ण नैनोसेकंड क्षमता में वर्तमान क्षण को कैप्चर करता है।
यह toString
विधि एक विशिष्ट आईएसओ 8601 प्रारूप का उपयोग करके अपने मूल्य का एक स्ट्रिंग प्रतिनिधित्व उत्पन्न करती है । वह प्रारूप शून्य, तीन, छह या नौ अंकों के अंक ( मिलीसेकंड , माइक्रोसेकंड , या नैनोसेकंड ) को अंश-दूसरे का प्रतिनिधित्व करने के लिए आवश्यक के रूप में आउटपुट करता है।
यदि आप अधिक लचीला स्वरूपण, या अन्य अतिरिक्त सुविधाएँ चाहते हैं, तो UTC के लिए ( ZoneOffset.UTC
निरंतर ) a को प्राप्त करने के लिए ऑफ़सेट-यूटीटी ऑफ़ ज़ीरो लागू करें OffsetDateTime
।
OffsetDateTime now = OffsetDateTime.now( ZoneOffset.UTC );
सांत्वना दें…
System.out.println( "now.toString(): " + now );
जब चला…
now.toString(): 2014-01-21T23:42:03.522Z
जावा के बारे में
Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date
, Calendar
, और SimpleDateFormat
।
अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है ।
Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।
आप अपने डेटाबेस से सीधे java.time वस्तुओं का आदान-प्रदान कर सकते हैं । JDBC 4.2 या उसके बाद के JDBC ड्राइवर का अनुपालन करें । तारों की कोई जरूरत नहीं, कक्षाओं की कोई जरूरत नहीं ।java.sql.*
Java.time कक्षाएं कहाँ से प्राप्त करें?
ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval
, YearWeek
, YearQuarter
, और अधिक ।
Joda समय
अद्यतन: जोडा-टाइम परियोजना, अब रखरखाव मोड में , java.time कक्षाओं में प्रवासन की सलाह देती है ।
का उपयोग करते हुए Joda समय मुक्त के- लागत 3 तीय-पक्ष खुला स्रोत पुस्तकालय, आप कोड की केवल एक पंक्ति में वर्तमान दिनांक समय मिल सकता है।
Joda-Time ने नए java.time को प्रेरित किया। * जावा 8 में कक्षाएं, लेकिन एक अलग वास्तुकला है। आप जावा के पुराने संस्करणों में जोडा-टाइम का उपयोग कर सकते हैं। Joda-Time जावा 8 में काम करना जारी रखता है और सक्रिय रूप से बनाए रखा जाता है (2014 के अनुसार)। हालाँकि, Joda- टाइम टीम java.time को माइग्रेशन की सलाह देती है।
System.out.println( "UTC/GMT date-time in ISO 8601 format: " + new org.joda.time.DateTime( org.joda.time.DateTimeZone.UTC ) );
अधिक विस्तृत उदाहरण कोड (Joda-Time 2.3)…
org.joda.time.DateTime now = new org.joda.time.DateTime(); // Default time zone.
org.joda.time.DateTime zulu = now.toDateTime( org.joda.time.DateTimeZone.UTC );
सांत्वना दें…
System.out.println( "Local time in ISO 8601 format: " + now );
System.out.println( "Same moment in UTC (Zulu): " + zulu );
जब चला…
Local time in ISO 8601 format: 2014-01-21T15:34:29.933-08:00
Same moment in UTC (Zulu): 2014-01-21T23:34:29.933Z
टाइम ज़ोन काम करने वाले अधिक उदाहरण कोड के लिए, एक समान प्रश्न के लिए मेरा उत्तर देखें ।
समय क्षेत्र
मैं आपको हमेशा जेवीएम के वर्तमान डिफ़ॉल्ट समय क्षेत्र (जो किसी भी समय कर सकता हूं!) पर निर्भर होने के बजाय एक समय क्षेत्र निर्दिष्ट करने की सलाह देता हूं। इस तरह की निर्भरता समय-काल के काम में भ्रम और बग का एक सामान्य कारण लगती है।
जब कॉलिंग now()
वांछित / अपेक्षित समय क्षेत्र को सौंपा जाए। DateTimeZone
कक्षा का उपयोग करें ।
DateTimeZone zoneMontréal = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zoneMontréal );
वह वर्ग UTC समय क्षेत्र के लिए एक स्थिरांक रखता है ।
DateTime now = DateTime.now( DateTimeZone.UTC );
यदि आप वास्तव में जेवीएम के वर्तमान डिफ़ॉल्ट समय क्षेत्र का उपयोग करना चाहते हैं, तो एक स्पष्ट कॉल करें ताकि आपका कोड स्व-दस्तावेजीकरण हो।
DateTimeZone zoneDefault = DateTimeZone.getDefault();
आईएसओ 8601
आईएसओ 8601 प्रारूपों के बारे में पढ़ें । Java.time और Joda-Time दोनों उस मानक समझदार प्रारूप का उपयोग करते हैं जो दोनों को पार्स करने और उत्पन्न करने के लिए उनकी चूक के रूप में उपयोग करता है।
† वास्तव में, java.util.Date करता है एक समय क्षेत्र, स्रोत कोड की परतों के नीचे गहरे दफन है। अधिकांश व्यावहारिक उद्देश्यों के लिए, उस समय क्षेत्र की उपेक्षा की जाती है। तो, शॉर्टहैंड के रूप में, हम कहते हैं java.util.Date का कोई समय क्षेत्र नहीं है। इसके अलावा, उस दफन समय क्षेत्र तारीख की विधि द्वारा इस्तेमाल नहीं किया गया है toString
; यह विधि JVM के वर्तमान डिफ़ॉल्ट समय क्षेत्र का उपयोग करती है। इस भ्रामक वर्ग से बचने और जोडा-टाइम और java.time के साथ रहने के लिए सभी और अधिक कारण।