tl; डॉ
अपने अप्रचलित कन्वर्ट java.util.Date
, उनकी प्रतिस्थापन के लिए वस्तुओं java.time.Instant
। फिर बीते हुए समय की गणना करें Duration
।
Duration d =
Duration.between( // Calculate the span of time between two moments as a number of hours, minutes, and seconds.
myJavaUtilDate.toInstant() , // Convert legacy class to modern class by calling new method added to the old class.
Instant.now() // Capture the current moment in UTC. About two and a half hours later in this example.
)
;
d.toString (): PT2H34M56S
d.toMinutes (): 154
d.toMinutesPart (): 34
आईएसओ 8601 प्रारूप: PnYnMnDTnHnMnS
समझदार मानक आईएसओ 8601 कई वर्षों, महीनों, दिनों, घंटों आदि के रूप में समय की अवधि के संक्षिप्त पाठ को परिभाषित करता है। मानक ऐसे काल को अवधि कहते हैं । प्रारूप "पीरियड" PnYnMnDTnHnMnS
का P
अर्थ है, जहांT
दिनांक भाग को समय भाग से अलग करता है, और बीच में संख्याओं के बाद एक अक्षर होता है।
उदाहरण:
P3Y6M4DT12H30M5S
तीन साल, छह महीने, चार दिन, बारह घंटे, तीस मिनट और पांच सेकंड
PT4H30M
साढ़े चार घंटे
java.time
Java.time जावा 8 में बनाया गया और बाद में ढांचा परेशानी वर्ष supplants java.util.Date
/ java.util.Calendar
वर्गों। नई कक्षाएं अत्यधिक सफल जोडा-टाइम फ्रेमवर्क से प्रेरित हैं , जिसका उद्देश्य इसके उत्तराधिकारी के रूप में है, जो अवधारणा में समान है लेकिन फिर से वास्तुकला में है। JSR 310 द्वारा परिभाषित । थ्रीटेन-एक्स्ट्रा प्रोजेक्ट द्वारा विस्तारित । ट्यूटोरियल देखें ।
पल
Instant
कक्षा में समय रेखा पर एक पल का प्रतिनिधित्व करता यूटीसी के एक संकल्प के साथ नैनोसेकंड (नौ (9) एक दशमलव भिन्न के अंकों के लिए)।
Instant instant = Instant.now() ; // Capture current moment in UTC.
विरासत से बचने के लिए सर्वश्रेष्ठ जैसे कि Date
/ Calendar
। लेकिन अगर आपको java.time में अपडेट नहीं किए गए पुराने कोड के साथ इंटर-ऑपरेट करना है , तो आगे और पीछे कन्वर्ट करें। पुरानी कक्षाओं में जोड़े गए नए रूपांतरण विधियों को कॉल करें। A से जाने के java.util.Date
लिए Instant
, कॉल करें Date::toInstant
।
Instant instant = myJavaUtilDate.toInstant() ; // Convert from legacy `java.util.Date` class to modern `java.time.Instant` class.
समय की सीमा
Java.time कक्षाओं ने समय की अवधि को कई वर्षों, महीनों, दिनों, घंटों, मिनटों, सेकंडों के रूप में दो हिस्सों में विभाजित करने के इस विचार को विभाजित किया है:
Period
सालों, महीनों, दिनों के लिए
Duration
दिन, घंटे, मिनट, सेकंड के लिए
यहाँ एक उदाहरण है।
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime now = ZonedDateTime.now ( zoneId );
ZonedDateTime future = now.plusMinutes ( 63 );
Duration duration = Duration.between ( now , future );
सांत्वना देना।
दोनों Period
और उनके मूल्य का एक स्ट्रिंग प्रतिनिधित्व उत्पन्न Duration
करने के लिए आईएसओ 8601 मानक का उपयोग करते हैं।
System.out.println ( "now: " + now + " to future: " + now + " = " + duration );
अब: 2015-11-26T00: 46: 48.016-05: 00 [अमेरिका / मॉन्ट्रियल] भविष्य के लिए: 2015-11-26T00: 46: 48.016-05: 00 [अमेरिका / मॉन्ट्रियल] = PT1H3M
जावा 9 Duration
दिनों के हिस्से, घंटे का हिस्सा, मिनट का हिस्सा और सेकंड का हिस्सा पाने के लिए तरीके जोड़ता है ।
आप संपूर्ण अवधि में कुल दिन या घंटे या मिनट या सेकंड या मिलीसेकंड या नैनोसेकंड प्राप्त कर सकते हैं।
long totalHours = duration.toHours();
जावा 9 में Duration
कक्षा को दिन, घंटे, मिनट, सेकंड, मिलीसेकंड / नैनोसेकंड के विभिन्न हिस्सों को वापस करने के लिए नए तरीके मिलते हैं । कॉल to…Part
तरीके: toDaysPart()
, toHoursPart()
, और पर इतना।
ChronoUnit
यदि आप केवल समय की एक बड़ी ग्रैन्युलैरिटी की परवाह करते हैं, जैसे कि "बीते हुए दिनों की संख्या", तो ChronoUnit
एनम का उपयोग करें ।
long daysElapsed = ChronoUnit.DAYS.between( earlier , later );
एक और उदाहरण।
Instant now = Instant.now();
Instant later = now.plus( Duration.ofHours( 2 ) );
…
long minutesElapsed = ChronoUnit.MINUTES.between( now , later );
120
जावा के बारे में
Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date
, Calendar
, और SimpleDateFormat
।
Joda समय परियोजना, अब में रखरखाव मोड , प्रवास java.time को सलाह देता है।
अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है ।
Java.time कक्षाएं कहाँ से प्राप्त करें?
द थ्रीटेन-एक्सट्रा परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval
, YearWeek
, YearQuarter
, और अधिक ।
Joda समय
अद्यतन: जोडा-टाइम परियोजना अब रखरखाव मोड में है , जिसमें टीम जावा को माइग्रेशन की सलाह दे रही है कक्षाओं में । मैं इस खंड को इतिहास के लिए अक्षुण्ण रखता हूं।
जोडा-टाइम लाइब्रेरी अपनी चूक के लिए आईएसओ 8601 का उपयोग करता है। इसका Period
वर्ग पार्स करता है और इन PnYnMnDTnHnMnS तार उत्पन्न करता है।
DateTime now = DateTime.now(); // Caveat: Ignoring the important issue of time zones.
Period period = new Period( now, now.plusHours( 4 ).plusMinutes( 30));
System.out.println( "period: " + period );
प्रस्तुत करता है:
period: PT4H30M