Converta timestamp zoneado em com.google.protobuf.Timestamp
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
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