simpleDateformat не анализирует, когда второй включен - PullRequest
0 голосов
/ 06 марта 2019

Я получаю время в определенном формате, который я хочу преобразовать в другой формат. Приведенный ниже фрагмент кода взят из одного из ответов о переполнении стека.

SimpleDateFormat origDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
SimpleDateFormat newDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date retrivedDate = origDateFormat.parse(origFormat);
return newDateFormat.format(retrivedDate);

Этот формат кода работает, пока моя дата ввода имеет следующий формат: 22/08/2015 14:23. Но когда я пытаюсь с секундами, я получаю ошибку:

Неразборчивая дата: «03.06.2009 14:17:25»

SimpleDateFormat origDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
SimpleDateFormat newDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date retrivedDate = origDateFormat.parse(origFormat);
return newDateFormat.format(retrivedDate);

1 Ответ

1 голос
/ 06 марта 2019

Вот метод javadoc parse(), и вот что он говорит:

Анализирует текст с начала данной строки для получения даты.Метод может не использовать весь текст данной строки.

Таким образом, согласно документации, вы можете анализировать 06/03/2019 14:17:25 даты как в формате dd/MM/yyyy HH:mm, так и dd/MM/yyyy HH:mm:ss.Если вы проанализируете формат, который не содержит секунд, он проигнорирует вторую часть.Ниже приведен рабочий код:

String date = "06/03/2019 14:17:25";
SimpleDateFormat mmDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
SimpleDateFormat ssDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

System.out.println(mmDateFormat.parse(date));
System.out.println(ssDateFormat.parse(date));

Ниже приведены выходы:

Wed Mar 06 14:17:00 GMT 2019
Wed Mar 06 14:17:25 GMT 2019
...