Преобразование времени начала и окончания TestNG в Postgres без часового пояса - PullRequest
0 голосов
/ 11 февраля 2019

В настоящее время у меня есть некоторый пользовательский код отчетности TestNG, который работает с локальной базой данных MySQL, с которой я тестировал.Полученная база данных является postgres из-за проблем с последними версиями MySQL в AWS, при попытке преобразовать формат TestNG в миллисекунды. У меня возникли проблемы с форматом, который, как мне кажется, не позволяет получить тот, который работает правильно.

В моем пользовательском коде отчета использовалось следующее:

report.reporting.put("startDate", testResult.getStartMillis());
report.reporting.put("endDate", testResult.getEndMillis());

SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
String startDbTime = sdf.format(report.get("startDate"));
String endDbTime = sdf.format(report.get("endDate"));

Когда я пробую некоторые из форматов даты, я получаю ошибки индексации, такие как: DateTimeParseException: текст не может быть проанализирован с индексом 4

Я использовал несколько различных опций, таких как смещение или мгновенно, но безуспешно.

Это коллекция опций, которые я пробовал.

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
    String startDbTime = sdf.format(report.get("startDate"));
    String endDbTime = sdf.format(report.get("endDate"));

    // OffsetDateTime startDbTime = OffsetDateTime.parse(startRawDbTime);
    // OffsetDateTime endDbTime = OffsetDateTime.parse(endRawDbTime);
    // ZonedDateTime startDbTime = ZonedDateTime.parse(startRawDbTime);
    // ZonedDateTime endDbTime = ZonedDateTime.parse(endRawDbTime);

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
    String startRawDbTime = sdf.format(report.get("startDate"));
    String endRawDbTime = sdf.format(report.get("endDate"));
    DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
    LocalDate startParse = LocalDate.parse(startRawDbTime,formatter);
    LocalDate endParse = LocalDate.parse(endRawDbTime,formatter);
    Long startTimeRaw = Long.parseLong(report.get("startDate").toString());
    Instant startInst = Instant.ofEpochMilli(startTimeRaw);
    ZonedDateTime zoneStart = ZonedDateTime.ofInstant(startInst, ZoneOffset.UTC);
    LocalDate dateStart = formatter.format(zoneStart);

Есть ли у меня шаг конвертации?отсутствует?Я думал, что было бы просто преобразовать из миллис в то, что принял бы Postgres.

1 Ответ

0 голосов
/ 13 февраля 2019

Выяснили, как это сделать с PostGres, изменив таблицу БД на дату с часовым поясом, а затем изменили мой код Java на следующее:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String startRawDbTime = sdf.format(report.get("startDate"));
String endRawDbTime = sdf.format(report.get("endDate"));
Timestamp timeStart = Timestamp.valueOf(startRawDbTime);
Timestamp timeEnd = Timestamp.valueOf(endRawDbTime);

С обновлением вставки оператора с указанием правоговведите:

    reportInsert.setObject(4,timeStart, Types.TIMESTAMP);
    reportInsert.setObject(5,timeEnd, Types.TIMESTAMP);

Теперь все работает как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...