Парсинг даты от Календаря в Java

У меня есть следующая функция

public static Date parseDate(String date, String format) throws ParseException
 {
         SimpleDateFormat formatter = new SimpleDateFormat(format);
         return formatter.parse(date);
 }

Я использую это следующим образом в моем коде

Calendar eDate = Calendar.getInstance();
eDate.add(Calendar.DAY_OF_MONTH,10);
Date date = null;
  try {
   date = parseDate(eDate.getTime().toString(),"yyyy-MM-dd hh-mm-ss");
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

Но это бросает -

 java.text.ParseException: Unparseable date

Какова проблема здесь?

5
задан Carl Smotricz 14 July 2010 в 14:18
поделиться

8 ответов

Формат не сохраняется в Дата . Он хранится в Строке . Date # toString () возвращает фиксированный формат, который описан в его Javadoc .

Выполняйте форматирование только , в настоящий момент вам нужно отобразить Дата человеку в виде String .

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, 10);
Date date = calendar.getTime();
String formattedDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
System.out.println(formattedDate);

Обратите внимание, что MM означает месяцы, а мм - минуты. См. Также SimpleDateFormat javadoc .

14
ответ дан 18 December 2019 в 07:08
поделиться

Вы будете счастливы услышать, что нет необходимости анализировать дату из объекта Calendar : способ вытащить Date календаря осуществляется с помощью метода getTime () .


РЕДАКТИРОВАТЬ:

Для вывода даты в eDate в формате стиля ISO:

final DateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
String formattedDate = isoFormat.format(eDate.getTime());

Это не проверено, но я думаю, что это должно работать.

5
ответ дан 18 December 2019 в 07:08
поделиться

Проверьте метод Date.toString().

API заявляет, что возвращает его в формат:

dow mon dd hh:mm:ss zzz yyyy

, который является:

Mon Jan 28 14:22:07 EST 2004

Вы говорите парсеру ожидать: 2004-01-28 14-22-07

0
ответ дан 18 December 2019 в 07:08
поделиться

Вы можете просто использовать дату, возвращаемую календарем, вместо того, чтобы преобразовывать ее в строку и обратно в дату (видимо, используя неправильный формат даты). Дату можно получить следующим образом:

eDate.getTime()

Похоже, что в вашем случае SimpleDateFormat не нужен.

0
ответ дан 18 December 2019 в 07:08
поделиться
eDate.getTime().toString()

возвращает строковое представление даты в таком формате:

dow mon dd hh:mm:ss zzz yyyy (см. java.util.Date API).

Вы пытаетесь разобрать дату, используя этот формат:

yyyy-mm-dd hh-mm-ss .

Код правильно выбрасывает исключение ParseException.

0
ответ дан 18 December 2019 в 07:08
поделиться

Вы вставляете метку времени Zulu (UNIX), getTime () возвращает количество миллисекунд с 1 января 1970 г., 00:00:00 по Гринвичу . Затем вы определяете формат как гггг-мм-дд чч-мм-сс и пытаетесь проанализировать метку времени с помощью этого шаблона. Что не совпадает.

Вы можете использовать Date date = calendar.getTime (); , а затем отформатировать его с помощью new SimpleDateFormat («гггг-ММ-дд ЧЧ-мм-сс»). Формат (дата) ;

1
ответ дан 18 December 2019 в 07:08
поделиться

Не используйте toString () для чего-либо подобного. toString () следует использовать только для сообщений отладки.

Используйте DateFormat.format (..) для создания строки в предсказуемой форме.

1
ответ дан 18 December 2019 в 07:08
поделиться

В настоящее время вы форматируете с форматом по умолчанию из java.util.Date , а затем анализируете с потенциально другой формат. Вам также следует изменить строку формата - в настоящее время используются 12-часовые часы без индикатора am / pm и минуты дважды. Я думаю, вы имеете в виду: "гггг-ММ-дд ЧЧ-мм-сс"

1
ответ дан 18 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: