tl; डॉ
का प्रयोग करें सख्त मोड पर java.time.DateTimeFormatter
पार्स एक करने के लिए LocalDate
। के लिए ट्रैप DateTimeParseException
।
LocalDate.parse(
"31/02/2000" ,
DateTimeFormatter
.ofPattern ( "dd/MM/uuuu" )
.withResolverStyle ( ResolverStyle.STRICT )
)
पार्स करने के बाद, आप उचित मूल्य की जांच कर सकते हैं। उदाहरण के लिए, पिछले एक सौ वर्षों के भीतर एक जन्म तिथि।
birthDate.isAfter( LocalDate.now().minusYears( 100 ) )
विरासत की तारीखों की कक्षाओं से बचें
जावा के शुरुआती संस्करणों के साथ शिप किए गए परेशान पुराने दिनांक-समय वर्गों का उपयोग करने से बचें। अब java.time कक्षाओं द्वारा इसे दबा दिया गया ।
LocalDate
और DateTimeFormatter
&ResolverStyle
LocalDate
वर्ग समय के दिन और समय क्षेत्र के बिना बिना एक दिनांक-केवल मूल्य का प्रतिनिधित्व करता।
String input = "31/02/2000";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "dd/MM/uuuu" );
try {
LocalDate ld = LocalDate.parse ( input , f );
System.out.println ( "ld: " + ld );
} catch ( DateTimeParseException e ) {
System.out.println ( "ERROR: " + e );
}
java.time.DateTimeFormatter
कक्षा में परिभाषित तीन उदारता मोड से किसी के साथ तार पार्स करने के लिए सेट किया जा सकता ResolverStyle
enum। हम प्रत्येक कोड को आजमाने के लिए उपरोक्त कोड में एक लाइन डालते हैं।
f = f.withResolverStyle ( ResolverStyle.LENIENT );
परिणाम:
ResolverStyle.LENIENT
ld: 2000-03-02
ResolverStyle.SMART
ld: 2000-02-29
ResolverStyle.STRICT
त्रुटि: java.time.format.DateTimeParseException: पाठ '31 / 02/2000 'को पार्स नहीं किया जा सकता: अमान्य दिनांक' FEBRUARY 31 '
हम देख सकते हैं कि ResolverStyle.LENIENT
मोड में, अमान्य दिनांक को समतुल्य दिनों के लिए आगे ले जाया जाता है। में ResolverStyle.SMART
मोड (डिफ़ॉल्ट), एक तार्किक निर्णय महीने के भीतर और महीने के अंतिम दिन संभव के साथ जा रहा तारीख को रखने के लिए किया जाता है, एक लीप वर्ष में 29 फ़रवरी, वहाँ के रूप में उस महीने में कोई 31 दिन है। ResolverStyle.STRICT
मोड एक अपवाद शिकायत ऐसी कोई तारीख है कि वहाँ फेंकता है।
ये तीनों आपकी व्यावसायिक समस्या और नीतियों के आधार पर उचित हैं। आपके मामले में लगता है कि आप सख्त मोड को समायोजित करने के बजाय अमान्य दिनांक को अस्वीकार करना चाहते हैं।
जावा के बारे में
Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date
, Calendar
, और SimpleDateFormat
।
अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है ।
Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।
आप अपने डेटाबेस से सीधे java.time वस्तुओं का आदान-प्रदान कर सकते हैं । JDBC 4.2 या उसके बाद के JDBC ड्राइवर के अनुपालन का उपयोग करें । तार की कोई जरूरत नहीं, कक्षाओं की कोई जरूरत नहीं ।java.sql.*
Java.time कक्षाएं कहाँ से प्राप्त करें?
ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval
, YearWeek
, YearQuarter
, और अधिक ।