获取protobuf当前时间戳

时间:2019-03-25 16:08:35

标签: python timestamp protocol-buffers

通过创建脚本并通过Google API(BigQuery数据传输服务)运行脚本来调度作业,该脚本使用 protobuf消息时间戳记类型设置开始日期和结束日期。我无法将其更改为当前时间戳。

检查以下资源:

我曾尝试像下面那样设置属性,但这会引发错误“请求包含无效参数”。

now = time.time()
seconds = int(now)
start_time = Timestamp(seconds=seconds, nanos=0)
end_time = Timestamp(seconds=seconds, nanos=0)

请参见下面的工作示例:

#!/usr/bin/env python
from google.cloud import bigquery_datatransfer
from google.protobuf.timestamp_pb2 import Timestamp

client = bigquery_datatransfer.DataTransferServiceClient()

start_time = Timestamp()
end_time = Timestamp()

client.schedule_transfer_runs(client.get_transfer_config("projects/{project_id}/locations/europe/transferConfigs/{transfer_id}").name,
                              start_time=start_time,
                              end_time=end_time)

这可行,但是将请求的开始时间和结束时间发送到1970-01-01T00:00:00Z时间戳的API-我希望能够将其更改为当前时间戳。

1 个答案:

答案 0 :(得分:1)

Timestamp docs中所述,有几种方法可以做到这一点。如果只想使用当前时间构建时间戳,则可以简单地使用timestamp_message.GetCurrentTime()。如果要使用seconds值填充时间戳,则可以简单地使用timestamp_message.FromSeconds(seconds)

作为更完整的示例

start_time = Timestamp()
start_time.GetCurrentTime()  # Stores the current time in start_time.
end_time = Timestamp()
seconds = 12345
end_time.FromSeconds(seconds)  # Stores the number of seconds in end_time.

对于您的特定实例,您应该能够做到

#!/usr/bin/env python
from google.cloud import bigquery_datatransfer
from google.protobuf.timestamp_pb2 import Timestamp

client = bigquery_datatransfer.DataTransferServiceClient()

start_time = Timestamp()
start_time.GetCurrentTime()
end_time = Timestamp()
end_time.GetCurrentTime()

client.schedule_transfer_runs(client.get_transfer_config("projects/{project_id}/locations/europe/transferConfigs/{transfer_id}").name,
                              start_time=start_time,
                              end_time=end_time)