protobuf时间戳:使用Java 8时间。

maj*_*aja 4 java protocol-buffers

我正在使用protobuf,并且我的一条消息使用该google.protobuf.Timestamp类型。

生成Java代码时,生成的protobuf类使用com.google.protobuf.Timestamp

有没有办法告诉protobuf使用新的Java 8类型(例如time.Instant)?在使用protobuf的任何地方,我都不想类型转换使我的代码混乱。理想情况下,它是在生成的代码本身内部完成的。

Jay*_*Jay 13

java.time.Instantcom.google.protobuf.Timestamp

com.google.protobuf.Timestamp.newBuilder()
    .setSeconds(myInstant.getEpochSecond())
    .setNanos(myInstant.getNano());
Run Code Online (Sandbox Code Playgroud)

com.google.protobuf.Timestampjava.time.Instant

Instant.ofEpochSecond(myProtoTimestamp.getSeconds(), myProtoTimestamp.getNanos());
Run Code Online (Sandbox Code Playgroud)

  • 在问题中,我要求专门更改生成代码中使用的类型以避免这段代码。 (2认同)

小智 9

Instant instant = Instant.ofEpochSecond(timestamp.getSeconds(), timestamp.getNanos());
Run Code Online (Sandbox Code Playgroud)

  • 请提供更详细的答案,而不只是一段代码 (3认同)
  • 如果一小段代码不言自明并且有助于用户搜索问题,则省略文本以关注重要部分应该没问题。在这里,赞成票的数量不言自明。 (3认同)

Rik*_*Rik 8

如果有人用 Kotlin 编写,Louis 的答案可以实现为扩展函数,如下所示:

fun Timestamp.toInstant(): Instant = Instant.ofEpochSecond(seconds, nanos.toLong())
Run Code Online (Sandbox Code Playgroud)

然后你就可以做myProto.myTimestampField.toInstant()