我正在使用protobuf,其中一个消息使用google.protobuf.Timestamp
类型。
当生成Java代码时,生成的protobuf类使用com.google.protobuf.Timestamp
。
有没有办法告诉protobuf使用新的Java 8类型(例如time.Instant
)? 我不想让类型转换在我使用protobuf的任何地方都变得混乱。最理想的情况是在生成的代码内部完成。
我正在使用protobuf,其中一个消息使用google.protobuf.Timestamp
类型。
当生成Java代码时,生成的protobuf类使用com.google.protobuf.Timestamp
。
有没有办法告诉protobuf使用新的Java 8类型(例如time.Instant
)? 我不想让类型转换在我使用protobuf的任何地方都变得混乱。最理想的情况是在生成的代码内部完成。
Instant instant = Instant.ofEpochSecond(timestamp.getSeconds(), timestamp.getNanos());
java.time.Instant
转换为 com.google.protobuf.Timestamp
:com.google.protobuf.Timestamp.newBuilder()
.setSeconds(myInstant.getEpochSecond())
.setNanos(myInstant.getNano());
com.google.protobuf.Timestamp
转换为 java.time.Instant
:Instant.ofEpochSecond(myProtoTimestamp.getSeconds(), myProtoTimestamp.getNanos());
fun Timestamp.toInstant(): Instant = Instant.ofEpochSecond(seconds, nanos.toLong())
然后你只需使用 myProto.myTimestampField.toInstant()
Instant anInstant = Instant.ofEpochMilli(com.google.protobuf.util.Timestamps.toMillis(someGoogleProtobufTimestamp));
如果你正确导入(只显示示例中使用的软件包),它看起来会更短更好看。