将分区时间戳转换为 com.google.protobuf.Timestamp

Convert zoned timestamp to com.google.protobuf.Timestamp

在我使用 Swagger 创建的自定义 API 中,我需要输入时间戳。

在我的 YAML 文件中,我已将输入参数的格式定义为 date-time,如 Swagger 网页上所述 date-time – the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

我想将生成的分区时间戳转换为 com.google.protobuf.Timestamp,但我不知道该怎么做,需要帮助。我正在使用 Kotlin。

到目前为止,我已经尝试实现一些来自 Whosebug 的 Java 示例(在转换为 Kotlin 之后),例如:

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
        .format(new Date()));

LocalDateTime withoutTimezone = zoneDateTime.toLocalDateTime();
Timestamp timestamp = Timestamp.valueOf(withoutTimezone));

None 的示例似乎有效,因为我需要 com.google.protobuf.Timestamp 格式的输入参数,而上述示例不会产生这种格式。

任何有关如何转换时间戳的帮助将不胜感激。

我还没有测试过,但是通过阅读 com.google.protobuf.Timestamp 文档,这似乎是一个选项:

    String exampleInput = "2020-08-27T20:13:10+02:00";
    Instant javaTimeInstant = OffsetDateTime.parse(exampleInput).toInstant();
    com.google.protobuf.Timestamp ts = com.google.protobuf.Timestamp.newBuilder()
           .setSeconds(javaTimeInstant.getEpochSecond())
           .setNanos(javaTimeInstant.getNano())
           .build();

我正在使用 Java。您或许可以自己手动翻译成 Kotlin?

文档 link: com.google.protobuf.Timestamp