Форматировать строку даты и времени только во время - PullRequest
4 голосов
/ 24 января 2011

Я извлекаю дату и время из БД SQLite, которая выходит в формате ...

2011-01-24 02:45:00

В C # я могу просто использовать DateTime.Parse("2011-01-24 02:45:00").ToString("HH:mm"), чтобы получить строку 02:45

Могу ли я сделать это в Android / Java?Мой код в моем приложении для Android выглядит следующим образом ...

// dateStr below is logging as correctly being yyyy-MM-dd HH:mm:ss format
String dateStr = cursor.getString(cursor.getColumnIndex("start_time"));
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
String shortTimeStr = sdf.format(dateStr); // <-- throws IllegalArgumentException

РЕДАКТИРОВАТЬ: Спасибо и doc_180, и Константину Бурову - приведенные примеры помогли мне разобраться в проблеме.Частично проблема заключалась в том, что я импортировал java.sql.Date вместо java.util.Date.Я изменил все вокруг, и теперь он отлично работает для меня.

Ответы [ 2 ]

12 голосов
/ 24 января 2011

Вам нужно сделать следующее.

try {
   Date date = null;
   date = df.parse("2011-01-24 02:45:00");
   SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
   String shortTimeStr = sdf.format(date);
   System.out.println(shortTimeStr);
} catch (ParseException e) {
   // To change body of catch statement use File | Settings | File Templates.
   e.printStackTrace(); 
}

Как я уже упоминал в комментарии, вы должны хранить время в виде миллисекунд вместо строки. В противном случае я не вижу другого пути, кроме создания объекта посредника Date.

2 голосов
/ 24 января 2011

SimpleDateFormat.format ожидает дату или календарь в качестве аргумента при передаче строки. Сначала преобразуйте строку в дату.

String dateStr = cursor.getString(cursor.getColumnIndex("start_time"));
SimpleDateFormat toFullDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date fullDate = toFullDate.parse(dateStr);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
String shortTimeStr = sdf.format(fullDate); 

И да, я бы предпочел хранить дату как можно дольше в базе данных, поэтому получение объекта Date было бы более тривиальным:

Long dateMilliseconds = cursor.getLong(cursor.getColumnIndex("start_time"));
Date fullDate = new Date(dateMilliseconds);
...