Отформатируйте строку даты и времени только времени

Я извлекаю datetime из SQLite DB, который выходит в формате …

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 

EDIT: Благодаря как doc_180, так и Константину Бурову – приведенные примеры помогли мне разобраться в проблеме. Часть проблемы заключалась в том, что я импортировал java.sql.Date вместо java.util.Date. Я изменил ситуацию, и теперь он отлично работает для меня.

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

 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(); } 

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

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

 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); 
Intereting Posts
Управление ключами Android (Framework) Android – обновить виджет над сервисом с данными из сети. Лучший подход? Android JNI: GetObjectClass сбой с SIGSEGV (не действительная ссылка JNI) Как отсортировать имя и фамилию в строке поиска – Sqlite Ошибка «Не удалось инициализировать графику Unity» в Unity3D Facebook (OAuthException – # 100) Пробовал доступ к несуществующему полю (first_name) для типа узла (AnonymousUser) EditText в Адаптере списка, как сохранить значение? Android Navigation Drawer (вызывающие действия) с AbstractMainActivity GPS Android – получить позиционирование только один раз Где проверить изменение ориентации в андроидном фрагменте Почему элементы исчезают, когда я просматриваю listView? Есть ли способ оживить домашний виджет? Вызывает метод libgdx SpriteBatch для начала и конца в несколько раз дороже? Получить основную учетную запись электронной почты телефона android Как я могу отправить данные с помощью финиша?