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

时间:2019-02-11 01:28:12

标签: postgresql testng reporting

我目前有一些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"));

当我尝试某些dateformatter时,我收到诸如以下索引错误: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 :(得分:0)

通过将数据库表重置为带时区的日期,然后将我的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);

使用正确的类型更新语句插入

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

现在一切正常。