अगर मेरे पास एक स्ट्रिंग है जिसमें एक प्रारूप (अज्ञात) "d / MM / YY" या "m: d: YYYY" आदि शामिल हैं।

मैं इसे कैसे पार्स कर सकता हूं और दिन, महीने, वर्ष मान प्राप्त कर सकता हूं?

मैंने सभी प्रारूप संयोजनों के साथ एक सरणी भरकर उन्हें पार्स करने की कोशिश की, और उनमें से प्रत्येक के साथ तारीख को पार्स करने की कोशिश की, मुझे लगता है कि यह एक बेवकूफ समाधान है!

कोई विचार ?

2
Minions 4 पद 2015, 16:55

5 जवाब

सबसे बढ़िया उत्तर

आपकी सबसे अच्छी शर्त नैट्टी का उपयोग करना है

बहुत उपयोगी पुस्तकालय,

इसका उपयोग कैसे करें इसका एक उदाहरण यहां दिया गया है:

public static Date parse(String date) throws Exception {

    try{

        List<DateGroup> parse = new PrettyTimeParser().parseSyntax(date);
        return parse.get(0).getDates().get(0);

    }catch (Exception e){
        throw new Exception("unparseable date: " + date);
    }

}
3
nafas 4 पद 2015, 14:02

यदि आप अज्ञात पैटर्न प्रारूप में हैं, तो आप इस तरह से कुछ का उपयोग कर सकते हैं

    DateTimeFormatter formatter1 = DateTimeFormat.forPattern("d/MM/YY")
            .withLocale(Locale.UK);
    DateTimeFormatter formatter2 = DateTimeFormat.forPattern("m:d:YYYY")
            .withLocale(Locale.UK);
    ...
    DateTimeFormatter formatterN = DateTimeFormat.forPattern(...

    String stringDate = "08:18:2012";
    LocalDate date;
    try {
        date = formatter1.parseLocalDate(stringDate);
    } catch (Exception exp) {
       try {
          date = formatter2.parseLocalDate(stringDate);
       } catch (Exception exp) {
          ...
          date = formatterN.parseLocalDate(stringDate);
       }
    } 

या सूची का उपयोग कर:

    List<DateTimeFormatter> formatterList = new ArrayList<>();
    formatterList.add(DateTimeFormat.forPattern("d/MM/YY")
            .withLocale(Locale.UK));
    formatterList.add(DateTimeFormat.forPattern("m:d:YYYY")
            .withLocale(Locale.UK));
    ...
    formatterList.add(DateTimeFormat.forPattern(...

    String stringDate = "08:18:2012";
    LocalDate date;
    for(DateTimeFormatter formatter : formatterList) {
       try {
          return formatter.parseLocalDate(stringDate);
       } catch (Exception exp) {

       }
    } 

लेकिन यह असंभव है अगर आपके पास "डी / एमएम / वाईवाई" और "एमएम / डी / वाईवाईवाई" जैसे पैटर्न हैं, क्योंकि आप पहचान सकते हैं कि क्या स्ट्रिंग "01/01/15" का अर्थ है (जहां दिन और जहां महीने)। केवल अगर आपके पास एक पैटर्न के साथ बहुत सारे तार हैं, तो आप सांख्यिकीय रूप से निस्संदेह कर सकते हैं कि दिन क्या है और महीने क्या है (महीने कभी भी अधिक न हों तो 12)।

1
Slava Vedenin 4 पद 2015, 14:18

Cacovsky के जवाब देखें यह प्रश्न।

1
Community 23 मई 2017, 10:28

इसका उपयोग करने का प्रयास करें:

  public static void main(String []args){
        SimpleDateFormat dt = new SimpleDateFormat(); 
        TimeZone date;
        date = dt.getTimeZone();
  Calendar cal = Calendar.getInstance().getInstance(Locale.UK);
  cal.setTimeZone(date);
  int year = cal.get(Calendar.YEAR);
  int month = cal.get(Calendar.MONTH);
  int day = cal.get(Calendar.DAY_OF_MONTH);

        System.out.println(year);  
        System.out.println(month); 
        System.out.println(day);   
    }
1
Abdelhak 4 पद 2015, 14:24
//download library:   org.ocpsoft.prettytime.nlp.PrettyTimeParser

String str = "2020.03.03";
Date date = new PrettyTimeParser().parseSyntax(str).get(0).getDates().get(0);
System.out.println(date)
0
double-beep 20 मई 2020, 11:05