#java #mysql #datetime
#java #mysql #datetime
Вопрос:
if(sqlData.get(i) != null){
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
java.sql.Timestamp myDate = new java.sql.Timestamp(dateFormat.parse(sqlData.get(i)).getTime());
preparedStatement.setTimestamp(i 1, myDate);
Я не уверен, что я делаю неправильно, и я продолжаю получать «java.text.ParseException: неразрешимая дата:» в 3-й строке.
Это даты, которые я извлек из базы данных и установил в прошлом.
System.out.println(sqlData.get(i));
распечатывается: 2014-04-19 05:48:22
Комментарии:
1. Похоже, проблема связана со
sqlData.get(i)
строкой, которая, возможно, не соответствует указанному вами формату даты. ВыведитеsqlData.get(i)
значение для проверки.2. Исключение не потому, что дата прошла. Это потому
sqlData.get(i)
, что возвращает дату, которой нет в"yyyy/MM/dd HH:mm:ss"
формате. проверьте каждое из значений в этом списке, чтобы найти значение с неправильным форматом. Также, если даты взяты из базы данных, вам может быть лучше использовать их какDate
orTimestamp
, а не aString
.3. @Nivas я на 100% уверен, что SQLData.get(i) возвращает строку в правильном формате.
4. @user3521471 Можете ли вы распечатать (sysout) даты и опубликовать здесь дату, которая вызывает исключение?
5. @user3521471 … и формат другой :-). У вас есть
/
разделитель дат, а дата имеет-
Ответ №1:
java.text.ParseException: Unparseable date
выбрасывается, dateFormat.parse(
когда переданная ему строка не имеет того же формата, что и указанный шаблон.
Также обратите внимание, что вы не опубликовали все сообщение об исключении (всю строку). Это было бы
java.text.ParseException: Unparseable date:2014-04-19 05:48:22
В вашем случае
2014-04-19 05:48:22
не в формате "yyyy/MM/dd HH:mm:ss"
Ваша строка шаблона должна быть
yyyy-MM-dd HH:mm:ss Note the - instead of /
Комментарии:
1. Вау. Я чувствую себя так глупо. Я потратил около 2 часов, пробуя различные методы правильной вставки этого. Еще одна пара глаз всегда полезна, спасибо.
Ответ №2:
Вот пример синтаксического анализа даты и последующего создания из нее временной метки. Это было тестирование и работает, поэтому, если вы столкнетесь с какими-либо ошибками, это может иметь какое-то отношение к имеющимся у вас данным, а не к самому коду.
String dateString = "1999/10/24 10:24:99";
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date dateObj = dateFormat.parse(dateString);
Timestamp timeStamp = new Timestamp(dateObj.getTime());