Java для MySQL. Мне нужно конвертировать из строкового параметра в метку времени - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь разобрать строку в Timestamp, потому что мне нужно сохранить эти данные на bbdd mysql.

String dateString: "2018-10-17T22:37:10.000+0000";
java.sql.Timestamp timeStampDate = null;
try {
        DateFormat formatter;
        formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
        Date date = (Date) formatter.parse(dateString);
        timeStampDate = new Timestamp(date.getTime());

    } catch (ParseException e) {
        log.debug("ERROR parser String to Timestamp to save bbdd. ", e.getMessage());
    }

Когда я запускаю свое приложение, я получаю следующее сообщение:

ОШИБКА синтаксического анализатора String to Timestamp для сохранения bbdd. Неразборчивая дата: «2018-10-17T22: 37: 10.000 + 0000»

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

java.time

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSXX");
    String dateString = "2018-10-17T22:37:10.000+0000";
    OffsetDateTime odt = OffsetDateTime.parse(dateString, formatter);

    System.out.println("Parsed datetime: " + odt);

Выходные данные этого кода:

Дата анализа: 2018-10-17T22: 37: 10Z

Для сохранения в MySQL хорошо использовать объект datetime, но класс Timestamp имеет проблемы с дизайном и в настоящее время давно устарел.Мне жаль, что у меня нет опыта работы с MySQL, но я думаю, что должно работать следующее:

    PreparedStatement ps = myDatabaseConnection.prepareStatement(
            "insert into my_table (my_timestamp) values (?)");
    ps.setObject(1, odt);

Ссылка: Учебное пособие по Oracle: Дата и время объясняя, как использовать java.time.

0 голосов
/ 14 ноября 2018

измените маску на

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS");

так что у вас есть

java.sql.Timestamp timeStampDate = null;
String dateString = "2018-10-17T22:37:10.000+0000";

try {
    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    Date date = formatter.parse(dateString);
    timeStampDate = new Timestamp(date.getTime());

} catch (ParseException e) {
    e.printStackTrace();
}

Кстати вам не нужно cast Date

Извинения за слабость, из-за спешки я не проверял вывод и, согласно комментарию @andreas, правильная маска на самом деле yyyy-MM-dd'T'HH:mm:ss.SSSZ

...