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

How to initialize Google protocol buffers Timestamp in Java?

Google protocol buffers (3.0.0-beta2) 提供 well-known type Timestamp.

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

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

最近Java8有没有替代方法

Java8 开始,有新的 Date/Time-API reader 使用 java.time.Instant

Instant time = Instant.now();
Timestamp timestamp = Timestamp.newBuilder().setSeconds(time.getEpochSecond())
    .setNanos(time.getNano()).build();

关于精度,结果应该是一样的。

这些天,您可以使用:

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

...

Timestamp timestamp = fromMillis(currentTimeMillis());

参见文档: