Как разобрать 2019-02-17T18: 39: 03? - PullRequest
0 голосов
/ 09 апреля 2019

Я ищу решение для разбора строковой даты.

 datestring.add("2019-02-17T18:39:02");
 datestring.add("2019-02-17T18:39:01");
 datestring.add("2019-02-17T18:39:03");
 datestring.add("2019-02-17T18:39:07");

строка данных - это ArrayList of String date.

  Collections.sort(datestring, new Comparator<String>() {
        DateFormat f = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss a");

        @Override
        public int compare(String o1, String o2) {
            try {
                return f.parse(o1).compareTo(f.parse(o2));
            } catch (ParseException e) {
                throw new IllegalArgumentException(e);
            }
        }
    });

Итак, я пытаюсь отсортировать список по дате. Но я получаю ParseException: -

Caused by: java.lang.IllegalArgumentException: java.text.ParseException: Unparseable date: "2019-02-17T18:39:07"

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

java.time

    List<String> datestring = new ArrayList<String>();

    datestring.add("2019-02-17T18:39:02");
    datestring.add("2019-02-17T18:39:01");
    datestring.add("2019-02-17T18:39:03");
    datestring.add("2019-02-17T18:39:07");

    Collections.sort(datestring, Comparator.comparing(LocalDateTime::parse));
    System.out.println(datestring);

Выходные данные этого фрагмента:

[2019-02-17T18: 39: 01, 2019-02-17T18: 39: 02, 2019-02-17T18: 39: 03, 2019-02-17T18: 39: 07]

Ваши строки имеют формат ISO 8601, международный стандарт формата даты и времени.LocalDateTime и другие классы java.time, современного Java-API даты и времени, анализируют (и печатают) формат ISO 8601 в качестве значения по умолчанию, то есть без какого-либо явного средства форматирования.

Comparator.comparing былвведен в Java 8 и принимает лямбду или как (как здесь) ссылку на метод.Если вы можете использовать его на уровне API, преимущество заключается не только в его краткости, но и в том, что трудно ошибиться.

Ссылки

1 голос
/ 09 апреля 2019

Ваша входящая дата имеет формат yyyy-MM-dd'T'hh:mm:ss, а используемый вами формат - dd-MMM-yyyy HH:mm:ss a, что не приведет к ошибке.

Попробуйте проанализировать входящую строку даты, используя yyyy-MM-dd'T'hh:mm:ss, а затем конвертируйте ее в другой формат, если хотите.

...