如何在Java中初始化Google协议缓冲区时间戳?

l00*_*0tr 7 java timestamp protocol-buffers

Google协议缓冲区(3.0.0-beta2)提供了众所周知的Timestamp类型.

该文档使用System.currentTimeMillis()描述Java中的初始化,如下所示:

long millis = System.currentTimeMillis();
Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
    .setNanos((int) ((millis % 1000) * 1000000)).build();
Run Code Online (Sandbox Code Playgroud)

在最近的Java 8中另一种方法吗?

l00*_*0tr 14

Java 8开始,有一个新的Date/Time-API,这使得使用java.time.Instant对读者更具吸引力

Instant time = Instant.now();
Timestamp timestamp = Timestamp.newBuilder().setSeconds(time.getEpochSecond())
    .setNanos(time.getNano()).build();
Run Code Online (Sandbox Code Playgroud)

结果应该与精度相同.


小智 8

这些天,您可以使用:

import static com.google.protobuf.util.Timestamps.fromMillis;
import static java.lang.System.currentTimeMillis;
import com.google.protobuf.Timestamp;

...

Timestamp timestamp = fromMillis(currentTimeMillis());
Run Code Online (Sandbox Code Playgroud)

请参阅以下文档: