2010-07-14 3 views
4

Я имею следующие функцииСинтаксический даты Календаря в 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 

Что проблема здесь?

+0

Дата, вероятно, непревзойденная. Инициализация (не создание) eDate может помочь. – msw

+0

Прочтите ответ @Carl Smotricz .... но что касается вашего формата '' yyyy-mm-dd hh-mm-ss', вы читаете минуты (мм) вместо месяца (MM) ... просто мысль! –

+0

К сожалению: P Да, но я попробовал изменить это на MM, но такая же ошибка наступает – Vishal

ответ

11

Формат не сохраняется в 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.

+0

Получил это работает спасибо :) – Vishal

+0

Добро пожаловать. – BalusC

1

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

+0

Это дата, когда он не может разобрать «21 июля 2010 7:24:07 PM» – Vishal

+0

@Vishal: Да, это потому, что вы форматируете его с помощью java.util.Date.toString. –

1

Вы вставив 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);

5

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


EDIT:

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

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

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

+0

Точно ....: -) –

+0

Да, но мне нужно отформатировать его в «yyyy-mm-dd hh-mm-ss» – Vishal

+0

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

1

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

Используйте DateFormat.format(..), чтобы создать строку в предсказуемой форме.

0

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

eDate.getTime() 

В вашем случае, по-видимому, нет необходимости в SimpleDateFormat.

+0

'Calendar # getTime()' возвращает 'java.util.Date', а не' long'. – BalusC

+0

@BalusC: спасибо, исправлено –

+0

Я предполагал, что образец кода был тестовым, а не фактическим кодом производства. Если бы он получил формат, это действительно хороший тест. –

0

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

АНИ утверждает, что она возвращает его в формат:

dow mon dd hh:mm:ss zzz yyyy 

, который:

Mon Jan 28 14:22:07 EST 2004 

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

0
eDate.getTime().toString() 

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

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

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

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

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

Смежные вопросы