代码之家  ›  专栏  ›  技术社区  ›  MichaelF

将测试开始和停止时间转换为不带时区的Postgres

  •  0
  • MichaelF  · 技术社区  · 6 年前

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

    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处分析文本

    我使用了一些不同的选项,比如offset或instant,但都没有成功。

    这是我尝试过的一些选择的集合。

        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可以接受的东西很简单。

    1 回复  |  直到 6 年前
        1
  •  0
  •   MichaelF    6 年前

    通过将DB表重置为date with time zone,解决了如何使用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);
    

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

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