tl; डॉ
जावा 9 और बाद में: वर्तमान क्षण को कैप्चर करते समय नैनोस्कॉन्ड्स रिज़ॉल्यूशन तक। यह दशमलव अंश का 9 अंक है।
Instant.now()
2017-12-23T12: 34: 56.123456789Z
माइक्रोसेकंड तक सीमित करने के लिए , काटें ।
Instant // Represent a moment in UTC.
.now() // Capture the current moment. Returns a `Instant` object.
.truncatedTo( // Lop off the finer part of this moment.
ChronoUnit.MICROS // Granularity to which we are truncating.
) // Returns another `Instant` object rather than changing the original, per the immutable objects pattern.
2017-12-23T12: 34: 56.123456Z
व्यवहार में, आप देखेंगे कि केवल माइक्रोसेकंड .now
को समकालीन पारंपरिक कंप्यूटर हार्डवेयर घड़ियों के साथ कैप्चर किया गया है जो नैनोसेकंड में सटीक नहीं हैं ।
विवरण
अन्य उत्तर कुछ हद तक जावा 8 के रूप में पुराने हैं।
java.time
जावा 8 और बाद में जावा.टाइम फ्रेमवर्क के साथ आता है । ये नई कक्षाएं जावा के शुरुआती संस्करणों जैसे कि java.util.Date/.Calendar और java.text.SimpleDateFormat के साथ भेजे गए त्रुटिपूर्ण परेशान करने वाले दिनांक-समय वर्गों को दबा देती हैं। जेएसआर 310 द्वारा फ्रेमवर्क को परिभाषित किया गया है , जो थोडा-एक्स्ट्रा प्रोजेक्ट द्वारा विस्तारित, जोडा-टाइम से प्रेरित है ।
Java.time में कक्षाएं नैनोसेकंड के लिए हल होती हैं , पुरानी तारीखों की कक्षाओं और जोडा-टाइम दोनों द्वारा उपयोग किए गए मिलीसेकंड की तुलना में बहुत अधिक महीन । और प्रश्न में पूछे गए माइक्रोसेकंड से बेहतर है ।
Clock
कार्यान्वयन
जबकि java.time कक्षाएं नैनोसेकंड में मूल्यों का प्रतिनिधित्व करने वाले डेटा का समर्थन करती हैं, फिर भी कक्षाएं नैनोसेकंड में मान उत्पन्न नहीं करती हैं। now()
विधियों, पुराने तिथि-समय वर्ग के रूप में वही पुरानी घड़ी कार्यान्वयन का उपयोग System.currentTimeMillis()
। हमारे पास Clock
java.time में नया इंटरफ़ेस है लेकिन उस इंटरफ़ेस के लिए कार्यान्वयन वही पुरानी मिलीसेकंड घड़ी है।
इसलिए आप ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )
एक भिन्नात्मक दूसरे के नौ अंकों को देखने के परिणाम के शाब्दिक प्रतिनिधित्व को प्रारूपित कर सकते हैं, लेकिन केवल पहले तीन अंकों की संख्या इस तरह होगी:
2017-12-23T12:34:56.789000000Z
जावा 9 में नई घड़ी
जावा 9 के ओपनजेडके और ओरेकल कार्यान्वयनों ने Clock
बारीक बारीकियों के साथ एक नया डिफ़ॉल्ट कार्यान्वयन किया है, जो जावा.टाइम कक्षाओं की पूर्ण नैनोसेकंड क्षमता तक है।
OpenJDK समस्या देखें, java.time.Clock.systemUTC () के कार्यान्वयन की सटीकता बढ़ाएँ । उस मुद्दे को सफलतापूर्वक लागू किया गया है।
2017-12-23T12:34:56.123456789Z
MacOS Sierra के साथ एक मैकबुक प्रो (रेटिना, 15-इंच, लेट 2013) पर, मुझे माइक्रोसेकंड (दशमलव अंश के छह अंक तक) में वर्तमान क्षण मिलता है।
2017-12-23T12:34:56.123456Z
हार्डवेयर घड़ी
याद रखें कि एक नए महीन Clock
कार्यान्वयन के साथ, आपके परिणाम कंप्यूटर द्वारा भिन्न हो सकते हैं। जावा वर्तमान क्षण जानने के लिए अंतर्निहित कंप्यूटर हार्डवेयर की घड़ी पर निर्भर करता है।
- हार्डवेयर घड़ियों का संकल्प व्यापक रूप से भिन्न होता है। उदाहरण के लिए, यदि किसी विशेष कंप्यूटर की हार्डवेयर घड़ी केवल माइक्रोसेकंड ग्रैन्युलैरिटी का समर्थन करती है , तो किसी भी उत्पन्न तिथि-समय के मानों में पिछले तीन अंकों के शून्य अंश के साथ केवल छह अंकों का अंश होगा।
- हार्डवेयर घड़ियों की सटीकता व्यापक रूप से भिन्न होती है। सिर्फ इसलिए कि एक घड़ी एक सेकंड के दशमलव अंश के कई अंकों के साथ एक मूल्य उत्पन्न करती है, उन अंकों को गलत किया जा सकता है, बस सन्निकटन, वास्तविक समय से adrift जैसा कि एक परमाणु घड़ी से पढ़ा जा सकता है । दूसरे शब्दों में, सिर्फ इसलिए कि आप दशमलव चिह्न के दाईं ओर अंकों का एक गुच्छा देखते हैं, इसका मतलब यह नहीं है कि आप इस तरह के रीडिंग के बीच बीत चुके समय को उस मिनट की डिग्री के लिए सही मान सकते हैं।