Joda समय
एक निर्भरता जोड़ने के लिए, मुझे java.util से डर लगता है। दोस्तो और। कैलेन्डर वास्तव में इतने बुरे हैं कि मैं किसी भी नए प्रोजेक्ट के लिए सबसे पहले जोडा-टाइम लाइब्रेरी को जोड़ता हूं। जावा 8 में आप नए java.time पैकेज का उपयोग कर सकते हैं, जोडा-टाइम से प्रेरित है।
जोडा-टाइम का मूल DateTime
वर्ग है। Java.util.Date के विपरीत, यह अपने निर्धारित समय क्षेत्र ( DateTimeZone
) को समझता है । जूडे से परिवर्तित करते समय, एक ज़ोन असाइन करें।
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTimeQuébec = new DateTime( date , zone );
LocalDate
यह सत्यापित करने का एक तरीका है कि एक ही तिथि पर दो बार-बार भूमि LocalDate
ऑब्जेक्ट में कनवर्ट हो ।
यह रूपांतरण निर्दिष्ट समय क्षेत्र पर निर्भर करता है। LocalDate
वस्तुओं की तुलना करने के लिए , उन्हें उसी क्षेत्र के साथ परिवर्तित किया जाना चाहिए।
यहाँ थोड़ी उपयोगिता विधि है।
static public Boolean sameDate ( DateTime dt1 , DateTime dt2 )
{
LocalDate ld1 = new LocalDate( dt1 );
// LocalDate determination depends on the time zone.
// So be sure the date-time values are adjusted to the same time zone.
LocalDate ld2 = new LocalDate( dt2.withZone( dt1.getZone() ) );
Boolean match = ld1.equals( ld2 );
return match;
}
बेहतर एक और तर्क होगा, पहले डेटटाइम ऑब्जेक्ट के टाइम ज़ोन का उपयोग करने के बजाय टाइम ज़ोन को निर्दिष्ट करना।
static public Boolean sameDate ( DateTimeZone zone , DateTime dt1 , DateTime dt2 )
{
LocalDate ld1 = new LocalDate( dt1.withZone( zone ) );
// LocalDate determination depends on the time zone.
// So be sure the date-time values are adjusted to the same time zone.
LocalDate ld2 = new LocalDate( dt2.withZone( zone ) );
return ld1.equals( ld2 );
}
स्ट्रिंग प्रतिनिधित्व
एक अन्य दृष्टिकोण प्रत्येक तिथि-समय के दिनांक भाग के एक स्ट्रिंग प्रतिनिधित्व का निर्माण करना है, फिर तार की तुलना करें।
फिर से, निर्धारित समय क्षेत्र महत्वपूर्ण है।
DateTimeFormatter formatter = ISODateTimeFormat.date(); // Static method.
String s1 = formatter.print( dateTime1 );
String s2 = formatter.print( dateTime2.withZone( dt1.getZone() ) );
Boolean match = s1.equals( s2 );
return match;
समय की सीमा
सामान्यीकृत समाधान समय की अवधि को परिभाषित करना है, फिर पूछें कि क्या अवधि में आपका लक्ष्य है। यह उदाहरण कोड Joda-Time 2.4 में है। ध्यान दें कि "मध्यरात्रि" -संबद्ध वर्गों को पदावनत किया जाता है। इसके बजाय का उपयोग करेंwithTimeAtStartOfDay
विधि का । Joda-Time विभिन्न तरीकों से समय की अवधि का प्रतिनिधित्व करने के लिए तीन कक्षाएं प्रदान करता है: अंतराल, अवधि और अवधि।
"हाफ-ओपन" दृष्टिकोण का उपयोग करते हुए जहां स्पैन की शुरुआत समावेशी और अंतिम अनन्य है।
लक्ष्य का समय क्षेत्र अंतराल के समय क्षेत्र से भिन्न हो सकता है।
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime target = new DateTime( 2012, 3, 4, 5, 6, 7, timeZone );
DateTime start = DateTime.now( timeZone ).withTimeAtStartOfDay();
DateTime stop = start.plusDays( 1 ).withTimeAtStartOfDay();
Interval interval = new Interval( start, stop );
boolean containsTarget = interval.contains( target );
java.time
जावा 8 और बाद में जावा.टाइम फ्रेमवर्क के साथ आता है । जेएसआर 310 द्वारा परिभाषित, जोडा-टाइम से प्रेरित और थ्रीटेन-एक्स्ट्रा प्रोजेक्ट द्वारा विस्तारित। ट्यूटोरियल देखें ।
Joda-Time के निर्माताओं ने हम सभी को निर्देश दिया है कि जैसे ही सुविधाजनक हो, java.time पर जाएं। इस बीच, Joda-Time एक सक्रिय रूप से बनाए रखा परियोजना के रूप में जारी है। लेकिन भविष्य के काम की उम्मीद है कि यह केवल Joda.time और थ्रीटेन-एक्स्ट्रा में होने के बजाय Joda-Time से होता है।
संक्षेप में java.time को संक्षेप में… Instant
यूटीसी में एक समयरेखा पर एक क्षण है। ऑब्जेक्ट ZoneId
प्राप्त करने के लिए एक समय क्षेत्र ( ) लागू करें ZonedDateTime
। दिनांक-समय की अस्पष्ट अनिश्चितकालीन विचार प्राप्त करने के समय बंद जाने के लिए,, "स्थानीय" वर्गों का उपयोग करें: LocalDateTime
, LocalDate
, LocalTime
।
इस उत्तर के जोडा-टाइम खंड में चर्चित तर्क java.time पर लागू होता है।
पुराने java.util.Date वर्ग के पास toInstant
java.time में रूपांतरण के लिए एक नई विधि है।
Instant instant = yourJavaUtilDate.toInstant(); // Convert into java.time type.
तिथि निर्धारित करने के लिए एक समय क्षेत्र की आवश्यकता होती है।
ZoneId zoneId = ZoneId.of( "America/Montreal" );
हम उस समय क्षेत्र ऑब्जेक्ट Instant
को प्राप्त करने के लिए आवेदन करते हैं ZonedDateTime
। उस से हम एक तारीख-केवल मूल्य (ए LocalDate
) निकालते हैं क्योंकि हमारा लक्ष्य तारीखों की तुलना करना है (घंटे, मिनट आदि नहीं)।
ZonedDateTime zdt1 = ZonedDateTime.ofInstant( instant , zoneId );
LocalDate localDate1 = LocalDate.from( zdt1 );
java.util.Date
तुलना के लिए हमें जिस दूसरी वस्तु की आवश्यकता है , वही करें । मैं इसके बजाय वर्तमान क्षण का उपयोग करूंगा।
ZonedDateTime zdt2 = ZonedDateTime.now( zoneId );
LocalDate localDate2 = LocalDate.from( zdt2 );
isEqual
एक ही तिथि मान के लिए परीक्षण करने के लिए विशेष विधि का उपयोग करें ।
Boolean sameDate = localDate1.isEqual( localDate2 );