स्ट्रिंग करने के लिए LocalDate


102

मैं एक स्ट्रिंग को एक में कैसे बदल सकता हूं LocalDate?

मैंने उदाहरण देखे हैं:

LocalDate dt = new LocalDate("2005-11-12");

लेकिन मेरे तार इस तरह हैं:

2005-nov-12

जवाबों:


78

जैसा कि आप Joda Time का उपयोग करते हैं, आपको उपयोग करना चाहिए DateTimeFormatter:

final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);

यदि जावा 8 या उसके बाद का उपयोग कर रहे हैं, तो हर्ट्ज़ी के उत्तर को देखें


"Yyyy-MMM-dd" प्रारूप के लिए एक संपादन भी प्रस्तुत किया। YYYY युग का वर्ष है, और (अधिक महत्वपूर्ण रूप से) DD वर्ष का दिन है।
स्पेंसर कोरमोस

जवाब थोड़ा गलत है ... जोडा समय के लिए, उपयोग करने के लिए कक्षा DateTimeFormat है, DateTimeFormatter नहीं। दूसरे शब्दों में, DateTimeFormat.ofPattern ("yyyy-MM-dd") को कॉल करें। parseLocalDate (yourInput);
डैन हयावुड

188

java.time

जावा 1.8 के बाद से, आप java.time कक्षाओं का उपयोग करके एक अतिरिक्त पुस्तकालय के बिना इसे प्राप्त कर सकते हैं। ट्यूटोरियल देखें ।

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
formatter = formatter.withLocale( putAppropriateLocaleHere );  // Locale specifies human language for translating, and cultural norms for lowercase/uppercase and abbreviations and such. Example: Locale.US or Locale.CANADA_FRENCH
LocalDate date = LocalDate.parse("2005-nov-12", formatter);

सिंटैक्स हालांकि लगभग समान है।


java.time.format.DateTimeParseException: टेक्स्ट '2005-nov-12' इंडेक्स 5 में पार्स नहीं किया जा सकता है
Atte Juvonen

3
ऐसा इसलिए होता है क्योंकि आपका डिफ़ॉल्ट लोकेल ऊपरी 'नो' के 'एन' होने की उम्मीद करता है।
hertzi

इस दृष्टिकोण की अधिक चर्चा के लिए एक समान प्रश्न का मेरा उत्तर देखें ।
बेसिल बॉर्क

14

आपको डेटटाइम से लोकलडेट तक जाना पड़ सकता है।

Joda समय का उपयोग करना:

DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();

2
ध्यान दें कि यह उत्तर जोडा को संदर्भित करता है, जावा एसई को नहीं।
डेविड नोव

9

डेटाटाइम फॉर्मेटिंग द्वारा किया जाता है org.joda.time.format.DateTimeFormatter class। तीन वर्ग फ़ार्मेटर्स बनाने के लिए फ़ैक्टरी विधियाँ प्रदान करते हैं , और यह एक है। दूसरे हैं ISODateTimeFormatऔर DateTimeFormatterBuilder

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd");
LocalDate lDate = new LocalDate().parse("2005-nov-12",format);

final org.joda.time.LocalDate classसमय क्षेत्र के बिना दिनांक का प्रतिनिधित्व करने वाला एक अपरिवर्तनीय डेटाटाइम वर्ग हैLocalDateहै धागे की सुरक्षित और अपरिवर्तनीय है कि, बशर्ते कालक्रम भी है। सभी मानक क्रोनोलॉजी वर्ग की आपूर्ति थ्रेड-सुरक्षित और अपरिवर्तनीय हैं।


1

DateTimeFormatter इन-बिल्ट प्रारूप हैं जिनका उपयोग सीधे चरित्र अनुक्रम को पार्स करने के लिए किया जा सकता है। यह मामला संवेदनशील है, नोव हालांकि नोव और एनओवी अभ्यस्त काम करेगा:

DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MMM-dd");

try {
    LocalDate datetime = LocalDate.parse(oldDate, pattern);
    System.out.println(datetime); 
} catch (DateTimeParseException e) {
    // DateTimeParseException - Text '2019-nov-12' could not be parsed at index 5
    // Exception handling message/mechanism/logging as per company standard
}

DateTimeFormatterBuilderफॉर्मैटर बनाने के लिए कस्टम तरीका प्रदान करता है। यह केस असंवेदनशील है, नोव, नोव और एनओवी को एक ही माना जाएगा।

DateTimeFormatter f = new DateTimeFormatterBuilder().parseCaseInsensitive()
        .append(DateTimeFormatter.ofPattern("yyyy-MMM-dd")).toFormatter();
try {
    LocalDate datetime = LocalDate.parse(oldDate, f);
    System.out.println(datetime); // 2019-11-12
} catch (DateTimeParseException e) {
     // Exception handling message/mechanism/logging as per company standard
}

1
एसओ में आपका स्वागत है, हम आपके इनपुट की सराहना करते हैं! कृपया अपने उत्तर को संपादित करें और थोड़ा और स्पष्टीकरण प्रदान करें, यह प्रश्न से कैसे संबंधित है, आपको अपना समाधान कहां से मिला, यह क्यों काम करता है? अधिक मार्गदर्शन के लिए stackoverflow.com/help/how-to-answer
B - rian
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.