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

2022-09-03 16:46:37

Google 协议缓冲区 (3.0.0-beta2) 提供众所周知的时间戳类型

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

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

在最近的Java 8中是否有其他方法


答案 1

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

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

在精度方面,结果应该是相同的。


答案 2

如今,您可以使用:

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

...

Timestamp timestamp = fromMillis(currentTimeMillis());

请参阅以下位置的文档: