मैं समय ज़ोन के बीच के अंतर के बारे में दो ज़ोनडेडेट समय के बीच अंतर को मुद्रित करने के लिए एक विधि लिखने की कोशिश कर रहा हूं ।
मुझे कुछ समाधान मिले, लेकिन उन सभी को LocalDateTime के साथ काम करने के लिए लिखा गया था ।
मैं समय ज़ोन के बीच के अंतर के बारे में दो ज़ोनडेडेट समय के बीच अंतर को मुद्रित करने के लिए एक विधि लिखने की कोशिश कर रहा हूं ।
मुझे कुछ समाधान मिले, लेकिन उन सभी को LocalDateTime के साथ काम करने के लिए लिखा गया था ।
जवाबों:
आप विधि का उपयोग कर सकते हैं के बीच से ChronoUnit ।
यह विधि उन समयों को उसी क्षेत्र (पहले तर्क से क्षेत्र) में परिवर्तित करती है और उसके बाद, टेम्पोरल इंटरफ़ेस में घोषित विधि तक आक्रमण करती है:
static long zonedDateTimeDifference(ZonedDateTime d1, ZonedDateTime d2, ChronoUnit unit){
return unit.between(d1, d2);
}
चूंकि ZonedDateTime और LocalDateTime दोनों टेम्पोरल इंटरफ़ेस लागू करते हैं, आप उन दिनांक-प्रकारों के लिए सार्वभौमिक विधि भी लिख सकते हैं:
static long dateTimeDifference(Temporal d1, Temporal d2, ChronoUnit unit){
return unit.between(d1, d2);
}
लेकिन ध्यान रखें, कि मिश्रित LocalDateTime और ZonedDateTime के लिए इस विधि को लागू करना DateTimeException की ओर जाता है ।
आशा है कि इससे सहायता मिलेगी।
Duration.between( zdtA , zdtB )
जैसा कि मेरे उत्तर में दिखाया गया है । मुझे लगता है कि between
विधि ZonedDateTime::toInstant()
दोनों को बुला रही है।
घंटे, मिनट, सेकंड के लिए:
Duration.between( zdtA , zdtB ) // Represent a span-of-time in terms of days (24-hour chunks of time, not calendar days), hours, minutes, seconds. Internally, a count of whole seconds plus a fractional second (nanoseconds).
वर्षों, महीनों, दिनों के लिए:
Period.between( // Represent a span-of-time in terms of years-months-days.
zdtA.toLocalDate() , // Extract the date-only from the date-time-zone object.
zdtB.toLocalDate()
)
मीकल एस द्वारा उत्तर दिखा रहा है, सही है ChronoUnit
।
Duration
और Period
एक अन्य मार्ग वर्ग Duration
और Period
वर्ग हैं। समय (घंटे, मिनट, सेकंड) के छोटे स्पैन के लिए पहले का उपयोग करें, दूसरा लंबे समय तक (वर्ष, महीने, दिन)।
Duration d = Duration.between( zdtA , zdtB );
कॉल करके मानक ISO 8601 प्रारूप में एक स्ट्रिंग का उत्पादन करें toString
। प्रारूप वह है PnYnMnDTnHnMnS
जहां P
शुरुआत को चिह्नित करता है और T
दो भागों को अलग करता है।
String output = d.toString();
जावा 9 और बाद में, to…Part
व्यक्तिगत घटकों को प्राप्त करने के लिए तरीकों को कॉल करें । मेरे एक और उत्तर में चर्चा की गई ।
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdtStart = ZonedDateTime.now( z );
ZonedDateTime zdtStop = zdtStart.plusHours( 3 ).plusMinutes( 7 );
Duration d = Duration.between( zdtStart , zdtStop );
2016-12-11T03: 07: 50.639-05: 00 [अमेरिका / मॉन्ट्रियल] /2016-12-11T06:14:50.639-05:00 [अमेरिका / मॉन्ट्रियल]
PT3H7M
IdeOne.com में लाइव कोड देखें ।
Interval
और LocalDateRange
ThreeTen-अतिरिक्त परियोजना java.time वर्गों के लिए कार्यक्षमता जोड़ता। इसकी एक उपयोगी कक्षा Interval
समय रेखा पर एक जोड़ी बिंदु के रूप में समय की अवधि का प्रतिनिधित्व करना है। एक और LocalDateRange
, LocalDate
वस्तुओं की एक जोड़ी के लिए है। इसके विपरीत, Period
& Duration
वर्ग प्रत्येक समय की अवधि का प्रतिनिधित्व करते हैं जैसा कि समयरेखा से जुड़ा नहीं है ।
वस्तुओं Interval
की एक जोड़ी के लिए कारखाना विधि Instant
।
Interval interval = Interval.of( zdtStart.toInstant() , zdtStop.toInstant() );
आप एक Duration
से प्राप्त कर सकते हैं Interval
।
Duration d = interval.toDuration();
Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date
, Calendar
, और SimpleDateFormat
।
Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।
अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है ।
आप अपने डेटाबेस से सीधे java.time ऑब्जेक्ट्स का आदान-प्रदान कर सकते हैं । JDBC 4.2 या उसके बाद के JDBC ड्राइवर के अनुपालन का उपयोग करें । तार की कोई जरूरत नहीं, कक्षाओं की कोई जरूरत नहीं ।java.sql.*
Java.time कक्षाएं कहाँ से प्राप्त करें?
ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval
, YearWeek
, YearQuarter
, और अधिक ।
of
अवधि पर एक विधि कहाँ देख रहे हैं जिसमें दो उदाहरण हैं? मैं केवल देखता हूंpublic static Duration of(long amount, TemporalUnit unit)
.of
साथ की जगह .between
। धन्यवाद।