Преобразовать строку в java.util.Date

Я храню даты в базе данных SQLite в этом формате:

d-MMM-yyyy,HH:mm:ss aaa

Когда я получаю дату с этим форматом, я получаю все, что хорошо кроме часа. Час всегда 00. Вот мой вывод:

String date--->29-Apr-2010,13:00:14 PM
After convrting Date--->1272479414000--Thu Apr 29 00:00:14 GMT+05:30 2010

Вот код:

    Date lScheduledDate = CalendarObj.getTime();
    DateFormat formatter = new SimpleDateFormat("d-MMM-yyyy,HH:mm:ss aaa");
    SomeClassObj.setTime(formatter.format(lScheduledDate));

    String lNextDate = SomeClassObj.getTime();
    DateFormat lFormatter = new SimpleDateFormat("d-MMM-yyyy,HH:mm:ss aaa");
    Date lNextDate = (Date)lFormatter.parse(lNextDate);
    System.out.println("output here"+lNextDate);

Что я делаю неправильно?

Ответ 1

Я думаю, что ваш формат даты не имеет смысла. Нет 13:00. Удалите "aaa" в конце вашего формата или поверните HH в hh.

Тем не менее, это отлично работает для меня:

String testDate = "29-Apr-2010,13:00:14 PM";
DateFormat formatter = new SimpleDateFormat("d-MMM-yyyy,HH:mm:ss aaa");
Date date = formatter.parse(testDate);
System.out.println(date);

Он печатает "Thu Apr 29 13:00:14 CEST 2010".

Ответ 2

Похоже, вы можете использовать что-то вроде SimpleDateFormat. http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html

Вы объявляете свой формат даты, а затем вызываете метод анализа с помощью своей строки.

private static final DateFormat DF = new SimpleDateFormat(...);
Date myDate = DF.parse("1234");

И как говорит Гийом, установите часовой пояс!

Ответ 3

Вы должны установить TimeZone в вашем DateFormat, иначе он будет использовать значение по умолчанию (в зависимости от настроек компьютера).