अन्य उत्तर सही हैं, विशेष रूप से arganzheng द्वारा java.time उत्तर । जैसा कि कुछ उल्लेख किया गया है, आपको पुराने java.util.Date/.Calendar कक्षाओं से बचना चाहिए क्योंकि वे खराब रूप से डिज़ाइन किए गए हैं, भ्रमित करते हैं, और परेशान करते हैं। उन्हें java.time कक्षाओं द्वारा दबा दिया गया है।
मुझे आधी रात को संभालने और समय के अंतराल के आसपास रणनीति के बारे में नोट्स जोड़ने दें ।
आधा खुला
तिथि-समय के काम में, समय के अंतराल को अक्सर "हाफ-ओपन" दृष्टिकोण का उपयोग करके परिभाषित किया जाता है। इस दृष्टिकोण में शुरुआत समावेशी है जबकि अंत अनन्य है । यह समस्याओं को हल करता है और यदि लगातार उपयोग किया जाता है तो यह आपकी तारीख-समय को संभालने में बहुत आसान होता है।
हल की गई एक समस्या दिन के अंत को परिभाषित कर रही है। दिन का अंतिम क्षण 23:59:59.999( मिलीसेकंड ) है? शायद, java.util.Date क्लास में (जल्द से जल्द जावा से; तकलीफदेह - इस क्लास से बचें!) और बेहद सफल Joda-Time लाइब्रेरी में। लेकिन अन्य सॉफ्टवेयर में, जैसे डेटाबेस जैसे पोस्टग्रेज, अंतिम क्षण 23:59:59.999999( माइक्रोसेकंड ) होगा। लेकिन अन्य सॉफ्टवेयर जैसे कि java.time फ्रेमवर्क (जावा 8 में निर्मित और बाद में, जोडा-टाइम के उत्तराधिकारी) और कुछ डेटाबेस जैसे H2 डेटाबेस में , अंतिम क्षण 23:59.59.999999999( नैनोसेकंड ) हो सकता है । बालों को विभाजित करने के बजाय, केवल पहले क्षण के संदर्भ में सोचें, अंतिम क्षण नहीं।
हाफ-ओपन में, एक दिन एक दिन के पहले क्षण से चलता है और ऊपर जाता है लेकिन अगले दिन का पहला क्षण शामिल नहीं करता है। तो इस तरह से सोचने के बजाय:
... आज से प्रातः 00:00 बजे (मध्यरात्रि प्रातः काल) से दोपहर 12:00 बजे (मध्य रात्रि)।
… ऐसा सोचें…
आज के पहले क्षण से, लेकिन कल के पहले क्षण को शामिल करते हुए:
(> = 00:00:00.0आज और < 00:00:00.0कल)
डेटाबेस कार्य में, यह दृष्टिकोण SQL में ऑपरेटर का उपयोग नहीं करता है।BETWEEN
दिन की शुरुआत
इसके अलावा, दिन का पहला क्षण हमेशा समय का नहीं होता है 00:00:00.0। डेलाइट सेविंग टाइम (डीएसटी) कुछ समय क्षेत्रों में, और संभवतः अन्य विसंगतियों का मतलब है कि दिन शुरू होने का एक अलग समय हो सकता है।
तो java.time कक्षाओं को एक कॉल के साथ एक दिन की शुरुआत निर्धारित करने का काम करते हैं LocalDate::atStartOfDay( ZoneId )। इसलिए हम के माध्यम से चक्कर है LocalDateऔर वापस करने के लिए ZonedDateTimeआप इस उदाहरण कोड में देख सकते हैं।
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime now = ZonedDateTime.now( zoneId );
ZonedDateTime todayStart = now.toLocalDate().atStartOfDay( zoneId );
ZonedDateTime tomorrowStart = todayStart.plusDays( 1 );
वैकल्पिक के पारित होने पर ध्यान दें ZoneId। यदि आपके JVM के वर्तमान डिफ़ॉल्ट समय क्षेत्र को छोड़ दिया गया है, तो यह अंतर्निहित है। स्पष्ट होना बेहतर है।
समय-क्षेत्र कार्य के लिए महत्वपूर्ण है। प्रश्न और कुछ अन्य उत्तर संभावित रूप से त्रुटिपूर्ण हैं क्योंकि सचेत रूप से समय क्षेत्र को नहीं संभालते हैं।
धर्मांतरित
यदि आपको java.util.Date या .Calendar का उपयोग करना है , तो उन पुरानी कक्षाओं में जोड़े गए नए रूपांतरण तरीकों की तलाश करें।
java.util.Date utilDate = java.util.Date.from( todayStart.toInstant() );
java.util.GregorianCalendar gregCal = java.util.GregorianCalendar.from( todayStart );
समय की सीमा
वैसे, अगर आप बहुत समय से काम कर रहे हैं, तो एक नज़र डालें:
Duration
Period
Interval
Intervalवर्ग में पाया जाता है ThreeTen-अतिरिक्त , परियोजना java.time ढांचे के लिए एक विस्तार। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए साबित होने वाला आधार है।
Interval todayMontreal = Interval.of( todayStart.toInstant() , tomorrowStart.toInstant() );
जावा के बारे में
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, और अधिक ।