Converta timestamp zoneado em com.google.protobuf.Timestamp

Aug 27 2020

Na minha API personalizada que estou criando usando o Swagger, preciso inserir um carimbo de data / hora.

No meu arquivo YAML, eu defini o formato do meu parâmetro de entrada date-timeconforme mencionado na página da Web do Swagger data e hora - a notação de data e hora conforme definido pela RFC 3339, seção 5.6, por exemplo, 2017-07-21T17: 32: 28Z

Quero converter o carimbo de data / hora zoneado resultante para, com.google.protobuf.Timestampmas não sei como fazer isso e preciso de ajuda. Estou usando Kotlin.

Até agora tentei implementar alguns dos exemplos Java do StackOverflow (após a conversão para Kotlin), por exemplo:

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

e

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

Nenhum dos exemplos parece funcionar, pois preciso do parâmetro de entrada no com.google.protobuf.Timestampformato, que os exemplos acima não resultam.

Qualquer ajuda seria apreciada em relação a como converter o carimbo de data / hora.

Respostas

1 OleV.V. Aug 27 2020 at 18:17

Não testei, mas pela leitura da com.google.protobuf.Timestampdocumentação, parece ser uma opção:

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

Estou usando Java. Você provavelmente pode traduzir manualmente para Kotlin sozinho?

Link de documentação: com.google.protobuf.Timestamp