Java Dateformat - Могу ли я сравнить входные данные с определенными форматами и проанализировать входные данные на основе формата, которому он соответствует? - PullRequest
0 голосов
/ 25 сентября 2011

Например:

Пользователь может ввести 23.01.1983 или 23.01.1983

Как бы я использовал DateFormat для записи двух разных типов форматов, таких как (ММ / ДД / ГГГГ) и (М / ДД / ГГГГ), и сравнивал их с фактической датой, чтобы увидеть, какой из них соответствует дате, чтобы я мог разобрать это успешно?

Ответы [ 2 ]

2 голосов
/ 25 сентября 2011

Распространенным решением при работе с несколькими входными форматами является проверка последовательности ожидаемых форматов в цикле до тех пор, пока один из них не будет успешным или все не завершится неудачей.Например,

public Date parseDate(List<DateFormat> formats, String text) {
    for(DateFormat fmt : formats) {
        try {
          return fmt.parse(inputDate);
        } catch (ParseException ex) {}
    }
    return null;
}

List<DateFormat> formats = Arrays.asList(new SimpleDateFormat("MM/dd/yyyy"));
Date d1 = parseDate(formats, "01/23/1983");
Date d2 = parseDate(formats, "1/23/1983");
1 голос
/ 25 сентября 2011

Поскольку Йохан опубликовал неправильное решение, я чувствую себя обязанным опубликовать правильное решение. "MM/dd/yyyy" отформатирует обе ваши тестовые строки:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatTest {
   public static void main(String[] args) {
      String[] tests = {"01/23/1983", "1/23/1983", "1/3/1983"};

      String formatString = "MM/dd/yyyy";

      SimpleDateFormat sdf = new SimpleDateFormat(formatString);

      for (String test : tests) {
         Date date = null;
         try {
            date = sdf.parse(test);
         } catch (ParseException e) {
            e.printStackTrace();
         }
         System.out.println(date);
      }
   }
}
...