Разбор даты из календаря на Java - PullRequest
4 голосов
/ 14 июля 2010

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

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

В чем здесь проблема?

Ответы [ 8 ]

13 голосов
/ 14 июля 2010

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

Выполните только форматирование на данный момент , которое необходимо отобразитьDate для человека как 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 означает месяцы, а mm - минуты.См. Также SimpleDateFormat javadoc .

5 голосов
/ 14 июля 2010

Вы будете рады услышать, что никогда не нужно анализировать дату у объекта Calendar: способ извлечь Date из Calendar - это метод getTime().


EDIT:

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

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

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

1 голос
/ 14 июля 2010

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

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

1 голос
/ 14 июля 2010

Вы вставляете Zulu Timestamp (UNIX), getTime() возвращает количество миллисекунд с January 1, 1970, 00:00:00 GMT. Затем вы определяете формат как yyyy-mm-dd hh-mm-ss и пытаетесь проанализировать отметку времени с этим шаблоном. Что не соответствует.

Вы можете использовать Date date = calendar.getTime();, а затем отформатировать его с помощью new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(date);

1 голос
/ 14 июля 2010

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

0 голосов
/ 14 июля 2010
eDate.getTime().toString()

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

dow mon dd чч: мм: сс zzz гггг (см. API java.util.Date).

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

гггг-мм-дд чч-мм-сс.

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

0 голосов
/ 14 июля 2010

Проверьте метод 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 голосов
/ 14 июля 2010

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

eDate.getTime()

Кажется, в вашем случае не требуется SimpleDateFormat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...