tl; डॉ
LocalDate.of( 1985 , 1 , 1 )
... या ...
LocalDate.of( 1985 , Month.JANUARY , 1 )
विवरण
java.util.Date
, java.util.Calendar
, और java.text.SimpleDateFormat
कक्षाओं बहुत जल्दी पहुंचे जब जावा पहले शुरू किया और विकसित किया गया था। कक्षाओं को अच्छी तरह से डिज़ाइन या कार्यान्वित नहीं किया गया था। सुधारों का प्रयास किया गया था, इस प्रकार आपके द्वारा पाया गया वेतन वृद्धि। दुर्भाग्य से सुधार के प्रयास काफी हद तक विफल रहे। आपको इन वर्गों से पूरी तरह बचना चाहिए । नई कक्षाओं द्वारा उन्हें जावा 8 में दबा दिया गया है।
आपके कोड में समस्याएं
एक java.util.Date में दिनांक और समय दोनों भाग होते हैं। आपने अपने कोड में समय भाग को अनदेखा कर दिया। इसलिए दिनांक वर्ग आपके जेवीएम के डिफ़ॉल्ट समय क्षेत्र द्वारा परिभाषित दिन की शुरुआत लेगा और उस समय को दिनांक ऑब्जेक्ट पर लागू करेगा। इसलिए आपके कोड के परिणाम भिन्न होंगे कि यह किस मशीन पर चलता है या कौन सा समय क्षेत्र निर्धारित है। शायद नहीं जो आप चाहते हैं।
यदि आप समय के बिना सिर्फ तारीख चाहते हैं, जैसे जन्म तिथि, तो आप किसी Date
वस्तु का उपयोग नहीं करना चाहते हैं । आईएसओ 8601 प्रारूप में आप तारीख के एक तार को स्टोर करना चाह सकते हैं YYYY-MM-DD
। या LocalDate
जोडा-टाइम (नीचे देखें) से एक ऑब्जेक्ट का उपयोग करें ।
Joda समय
जावा में सीखने के लिए पहली बात: कुख्यात परेशान करने वाले java.util से बचें ।
जैसा कि user3277382 द्वारा उत्तर में सही ढंग से उल्लेख किया गया है , जावा 8 में या तो Joda-Time या नया java.time * पैकेज का उपयोग करें।
कोड कोड जोडा-टाइम 2.3 में
DateTimeZone timeZoneNorway = DateTimeZone.forID( "Europe/Oslo" );
DateTime birthDateTime_InNorway = new DateTime( 1985, 1, 1, 3, 2, 1, timeZoneNorway );
DateTimeZone timeZoneNewYork = DateTimeZone.forID( "America/New_York" );
DateTime birthDateTime_InNewYork = birthDateTime_InNorway.toDateTime( timeZoneNewYork );
DateTime birthDateTime_UtcGmt = birthDateTime_InNorway.toDateTime( DateTimeZone.UTC );
LocalDate birthDate = new LocalDate( 1985, 1, 1 );
सांत्वना दें…
System.out.println( "birthDateTime_InNorway: " + birthDateTime_InNorway );
System.out.println( "birthDateTime_InNewYork: " + birthDateTime_InNewYork );
System.out.println( "birthDateTime_UtcGmt: " + birthDateTime_UtcGmt );
System.out.println( "birthDate: " + birthDate );
जब चला…
birthDateTime_InNorway: 1985-01-01T03:02:01.000+01:00
birthDateTime_InNewYork: 1984-12-31T21:02:01.000-05:00
birthDateTime_UtcGmt: 1985-01-01T02:02:01.000Z
birthDate: 1985-01-01
java.time
इस स्थिति में java.time का कोड जोडा-टाइम के समान है ।
हमें एक टाइम ज़ोन ( ZoneId
) मिलता है, और उस टाइम ज़ोन ( ZonedDateTime
) को दी गई डेट-टाइम ऑब्जेक्ट का निर्माण होता है । तब का उपयोग कर अपरिवर्तनीय वस्तुओं पैटर्न, हम पुराने वस्तु की एक ही पल के आधार पर नए तिथि-समय बनाने (के बाद से नैनोसेकंड की गिनती युग लेकिन सौंपा अन्य समय क्षेत्र)। अंत में हमें एक LocalDate
दिन का समय नहीं है और न ही समय क्षेत्र है, हालांकि उस समय का निर्धारण करते समय समय क्षेत्र लागू होने पर नोटिस ( उदाहरण के लिए न्यूयॉर्क में ओस्लो की तुलना में एक नया दिन पहले होता है )।
ZoneId zoneId_Norway = ZoneId.of( "Europe/Oslo" );
ZonedDateTime zdt_Norway = ZonedDateTime.of( 1985 , 1 , 1 , 3 , 2 , 1 , 0 , zoneId_Norway );
ZoneId zoneId_NewYork = ZonedId.of( "America/New_York" );
ZonedDateTime zdt_NewYork = zdt_Norway.withZoneSameInstant( zoneId_NewYork );
ZonedDateTime zdt_Utc = zdt_Norway.withZoneSameInstant( ZoneOffset.UTC ); // Or, next line is similar.
Instant instant = zdt_Norway.toInstant(); // Instant is always in UTC.
LocalDate localDate_Norway = zdt_Norway.toLocalDate();
जावा के बारे में
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
, और अधिक ।