java.time
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
String tm = "2019-02-09 07:35:54";
LocalDateTime dateTime = LocalDateTime.parse(tm, formatter);
System.out.println(dateTime);
Это дает следующий вывод:
2019-02-09T07: 35: 54
Я не рекомендую использовать SimpleDateFormat
, Date
и Timestamp
. Эти классы плохо разработаны и давно устарели, первые из них особенно печально известны. Вместо этого я использую java.time, современный Java-интерфейс даты и времени.
JDBC 4.2 +
Если вы думали, что вам нужна Timestamp
для вашей базы данных, вы, вероятно, этого не делаете. Предполагая, что ваш драйвер JDBC соответствует JDBC 4.2, вы можете напрямую присвоить ему объект LocalDateTime
, который мы только что создали. Например, как:
PreparedStatement ps = yourConnection.prepareStatement(
"insert into your_table(your_timestamp_col) values (?);");
ps.setObject(1, dateTime);
Что пошло не так в вашем коде?
В строке шаблона формата есть две ошибки, yyyy-MM-dd hh:mm:ss.SSS
:
- Предполагая, что часы в пользовательском вводе являются часами дня с 00 по 23, вам нужно прописать
HH
в верхнем регистре, чтобы их проанализировать, как LppEdd уже сказал в комментарии (строчные hh
для часа в пределах AM или PM от 01–12 и, разумеется, требует наличия маркера AM или PM).
- Поскольку пользовательский ввод не включает доли секунды, у вас не должно быть
.SSS
в шаблоне формата (это, вероятно, и стало причиной вашего исключения).
Ссылка
Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time.