करने के लिए नए जावा 8 डेटटाइमफॉर्मेटर का उपयोग करना मुझे एक साधारण समस्या है: मैं जावा स्ट्रिंग को "yyyyMMdd"
प्रारूप में पार्स करना चाहता हूं, ताकि "19800229"
मान्य दिनांक हो, लेकिन "19820229"
नहीं है। मान लें कि ये सामान्य ग्रेगोरियन कैलेंडर से एडी तिथियां हैं।सख्त तारीख पार्सिंग
मैं इस समस्या को हल करने के लिए जेडीके 8 से नए java.time
पैकेज का उपयोग करने की कोशिश कर रहा हूं, लेकिन यह आशा से अधिक जटिल साबित हो रहा है। मेरे वर्तमान कोड है:
private static final DateTimeFormatter FORMAT = DateTimeFormatter
.ofPattern("yyyyMMdd").withChronology(IsoChronology.INSTANCE)
.withResolverStyle(STRICT);
public static LocalDate parse(String yyyyMMdd) {
return LocalDate.parse(yyyyMMdd, FORMAT);
}
हालांकि, इस तरह के रूप में "19,800,228" पैदा करता है कि मुझे क्या करने के लिए एक समझ से बाहर त्रुटि है कोई मान्य दिनांक को पार्स:
java.time.format.DateTimeParseException: Text '19820228' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {MonthOfYear=2, DayOfMonth=28, YearOfEra=1982},ISO of type java.time.format.Parsed
मैं java.time.format.DateTimeFormatter
का उपयोग अपने सरल उपयोग के मामले को सुलझाने के लिए है ?
धन्यवाद @ टेक यात्रा। क्षमा करें, मेरा मतलब है कि दोनों मामलों में 2/2 9, जैसा कि आपने बताया था। 'DateTimeFormatter.BASIC_ISO_DATE' से बचने का कारण यह है कि इसका एक वैकल्पिक हिस्सा है कि मैं पारदर्शी नहीं होना चाहता हूं। क्या मैं वैकल्पिक भाग के बिना समकक्ष फॉर्मेटर बना सकता हूं? – 0xbe5077ed
मैंने आपकी आखिरी टिप्पणी को ध्यान में रखते हुए जवाब में संशोधन किया। कृपया इसे देखो! – TechTrip
काफी अच्छा, @ टेक ट्रिप। यही मैंने भी खोजा। ध्यान दें कि आप 'parseCaseInsensitive()' - अनावश्यक को बंद कर सकते हैं क्योंकि yyyyMMdd में कोई केस समस्या नहीं है - और 'startOptional()' क्योंकि आप कुछ भी वैकल्पिक नहीं शुरू कर रहे हैं। – 0xbe5077ed