Json ответ на postgresql преобразование даты и времени Java postgresql - PullRequest
0 голосов
/ 04 сентября 2018

Я получаю ответы JSON для поля Дата и время следующим образом: /Date(1534291200000)/ и PT12H18M02S

 SELECT     CAST('ClearingDate' AS TIMESTAMP) from testdata;

При использовании функций CAST или to_timestamp я получаю следующую ошибку:

ОШИБКА: неверный синтаксис ввода для отметки времени типа: "/ Дата (1534291200000) /" Состояние SQL: 22007

Как я могу преобразовать это в метку времени, используя postgresql? Если нет postgresql, есть ли способ сделать это в Java?

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Извините, я не знаю, как это сделать в PostgreSQL. В Java:

    String timestampString = "/Date(1534291200000)/";
    String millisString = timestampString.replaceFirst("^/Date\\((\\d+)\\)/$", "$1");
    Instant inst = Instant.ofEpochMilli(Long.parseLong(millisString));
    System.out.println(inst);

Выход

2018-08-15T00: 00: 00Z

Я использую регулярное выражение для проверки синтаксиса строки и удаления только подстроки цифр. Это число обозначается миллисекундами с эпохи. Класс Instant из java.time, современного Java-API даты и времени, является правильным для использования в качестве метки времени (забудьте об устаревшем классе Timestamp, он нам больше не нужен).

Если вам нужно сохранить это обратно в PostgreSQL:

    PreparedStatement stmt = yourConnection.prepareStatement(
            "insert into your_table(your_timestamp_column) values (?);");
    stmt.setObject(1, inst);

Пожалуйста, измените ваш дизайн базы данных и ситуацию.

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

0 голосов
/ 04 сентября 2018

Решение для прямого преобразования его в PostgreSQL:

to_timestamp(CAST(SUBSTRING (CAST(Clearingdate AS varchar), 9, 10) AS NUMERIC))
from date_test;

Я наконец понял это. Большое спасибо за ваш вклад.

0 голосов
/ 04 сентября 2018

использовать метку времени (импорт java.sql.Timestamp)

String fromJson = "/Date(1534291200000)/";
String ts = fromJson.substring(6, fromJson.length()-2);
Long tsInMillisSec = Long.parseLong(ts);
Timestamp ts = new Timestamp(tsInMillisSec);
...