如何在python中创建protobuf3时间戳?

P M*_*ran 5 python timestamp protocol-buffers

我看到有一个Timestamp对象,但它似乎不起作用。使用Python 3.6

$ pip install protobuf3
Run Code Online (Sandbox Code Playgroud)

在python中:

from google.protobuf.timestamp_pb2 import Timestamp
timestamp = Timestamp()
timestamp.GetCurrentTime()
Run Code Online (Sandbox Code Playgroud)

什么也没退。我究竟做错了什么?

小智 9

构建 protobuf 时间戳的唯一两个参数是秒和纳秒。它们被定义为从纪元 (1970-01-01 00:00:00) 开始的秒数。所以我们可以这样做:

import datetime
from google.protobuf.timestamp_pb2 import Timestamp

t = datetime.datetime.now().timestamp()
seconds = int(t)
nanos = int(t % 1 * 1e9)

proto_timestamp = Timestamp(seconds=seconds, nanos=nanos)
Run Code Online (Sandbox Code Playgroud)


小智 9

简单的例子:

message Data {
    google.protobuf.Timestamp tstamp = 1;
}
Run Code Online (Sandbox Code Playgroud)

设定值:

message.tstamp.FromDatetime(datetime.datetime.now())
Run Code Online (Sandbox Code Playgroud)

打印收到的消息:

tstamp {
    seconds: 1648070801
    nanos: 661005000
}
Run Code Online (Sandbox Code Playgroud)


P M*_*ran 5

ARRGGG我认为有一个虚拟的ENV问题。现在可以使用!

Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
>>> from google.protobuf.timestamp_pb2 import Timestamp
>>> timestamp = Timestamp()
>>> timestamp.GetCurrentTime()
>>> print(timestamp)
seconds: 1521497361
nanos: 600455000

>>>timestamp
seconds: 1521497361
nanos: 600455000
Run Code Online (Sandbox Code Playgroud)