Невозможно удалить ParseException - PullRequest
0 голосов
/ 08 марта 2019
try{
             SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
                Date parsedDate = dateFormat.parse(tm);
                timestamp = new java.sql.Timestamp(parsedDate.getTime());

        }
         catch (Exception pe) {
              System.out.println("unexpected exception");
                System.out.println(pe); 
                pe.printStackTrace(); 
            }

Консоль показывает «непредвиденную ошибку» (которая находится в моем блоке перехвата).Я пытаюсь преобразовать "tm", которая является входной датой на стороне клиента, в метку времени.Значение tm похоже на «ГГГГ-ММ-ДД ЧЧ: ММ: СС» (строка).Но консоль продолжает показывать Unparseable date.Я новичок в Java.

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Возможно, вы захотите попробовать это

    String tm = "2014-01-01 00:00:00";
    String frontEndFormat = "yyyy-MM-dd HH:mm:ss";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(frontEndFormat);
    LocalDateTime localDateTime = LocalDateTime.parse(tm, formatter);
    Timestamp timestamp = Timestamp.valueOf(localDateTime);
    //prints 2014-01-01 00:00:00.0
    System.out.println(timestamp);

Вы можете заметить, что верхний регистр ЧЧ используется для часов, а нижний регистр мм используется для минут.

0 голосов
/ 09 марта 2019

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:

  1. Предполагая, что часы в пользовательском вводе являются часами дня с 00 по 23, вам нужно прописать HH в верхнем регистре, чтобы их проанализировать, как LppEdd уже сказал в комментарии (строчные hh для часа в пределах AM или PM от 01–12 и, разумеется, требует наличия маркера AM или PM).
  2. Поскольку пользовательский ввод не включает доли секунды, у вас не должно быть .SSS в шаблоне формата (это, вероятно, и стало причиной вашего исключения).

Ссылка

Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time.

...