将TestNG开始和停止时间转换为没有时区的Postgres

问题描述 投票:0回答:1

我目前有一些TestNG自定义报告代码,可以与我一直在测试的本地MySQL数据库一起使用。由于AWS中最新MySQL版本的问题,最终的数据库是postgres,试图将TestNG millis的格式转换为我遇到的格式问题,我似乎无法得到一个正常工作的格式。

我的自定义报告代码使用以下内容:

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);

我缺少转换步骤吗?我认为从millis转换为postgres可以接受的东西会很简单。

postgresql testng reporting
1个回答
0
投票

通过将DB表重置为带时区的日期,然后将我的Java代码调整为以下内容,解决了如何使用PostGres执行此操作的方法:

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);

使用正确的类型更新语句insert:

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

现在一切都按预期工作了。

© www.soinside.com 2019 - 2024. All rights reserved.