У меня есть следующая функция
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
Какова проблема здесь?
Формат не сохраняется в Дата
. Он хранится в Строке
. 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 .
Вы будете счастливы услышать, что нет необходимости анализировать дату из объекта Calendar
: способ вытащить Date
календаря
осуществляется с помощью метода getTime ()
.
РЕДАКТИРОВАТЬ:
Для вывода даты в eDate
в формате стиля ISO:
final DateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
String formattedDate = isoFormat.format(eDate.getTime());
Это не проверено, но я думаю, что это должно работать.
Проверьте метод 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
Вы можете просто использовать дату, возвращаемую календарем, вместо того, чтобы преобразовывать ее в строку и обратно в дату (видимо, используя неправильный формат даты). Дату можно получить следующим образом:
eDate.getTime()
Похоже, что в вашем случае SimpleDateFormat не нужен.
eDate.getTime().toString()
возвращает строковое представление даты в таком формате:
dow mon dd hh:mm:ss zzz yyyy (см. java.util.Date API).
Вы пытаетесь разобрать дату, используя этот формат:
yyyy-mm-dd hh-mm-ss .
Код правильно выбрасывает исключение ParseException.
Вы вставляете метку времени Zulu (UNIX), getTime ()
возвращает количество миллисекунд с 1 января 1970 г., 00:00:00 по Гринвичу
. Затем вы определяете формат как гггг-мм-дд чч-мм-сс
и пытаетесь проанализировать метку времени с помощью этого шаблона. Что не совпадает.
Вы можете использовать Date date = calendar.getTime ();
, а затем отформатировать его с помощью new SimpleDateFormat («гггг-ММ-дд ЧЧ-мм-сс»). Формат (дата) ;
Не используйте toString ()
для чего-либо подобного. toString ()
следует использовать только для сообщений отладки.
Используйте DateFormat.format (..)
для создания строки в предсказуемой форме.
В настоящее время вы форматируете с форматом по умолчанию из java.util.Date
, а затем анализируете с потенциально другой формат. Вам также следует изменить строку формата - в настоящее время используются 12-часовые часы без индикатора am / pm и минуты дважды. Я думаю, вы имеете в виду: "гггг-ММ-дд ЧЧ-мм-сс"