首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python中设置protobuf时间戳字段?

如何在python中设置protobuf时间戳字段?
EN

Stack Overflow用户
提问于 2020-12-03 22:33:58
回答 3查看 2.2K关注 0票数 4

我正在探索协议缓冲区的使用,并希望使用protobuf3中的新时间戳数据类型。这是我的.proto文件:

代码语言:javascript
运行
复制
syntax = "proto3";

package shoppingbasket;

import "google/protobuf/timestamp.proto";

message TransactionItem {
  optional string product = 1;
  optional int32 quantity = 2;
  optional double price = 3;
  optional double discount = 4;
}

message Basket {
  optional string basket = 1;
  optional google.protobuf.Timestamp tstamp = 2;
  optional string customer = 3;
  optional string store = 4;
  optional string channel = 5;
  repeated TransactionItem transactionItems = 6;
}

message Baskets {
  repeated Basket baskets = 1;
}

在从这个.proto文件生成python类之后,我尝试使用生成的类创建一些对象。下面是代码:

代码语言:javascript
运行
复制
import shoppingbasket_pb2
from google.protobuf.timestamp_pb2 import Timestamp

baskets = shoppingbasket_pb2.Baskets()
basket1 = baskets.baskets.add()
basket1.basket = "001"
basket1.tstamp = Timestamp().GetCurrentTime()

由于错误而失败:

AttributeError:不允许在协议消息对象中组合字段"tstamp“的赋值。

有人能向我解释一下为什么这不管用吗?因为我没有工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-04 05:42:16

时间戳

我想你想:

代码语言:javascript
运行
复制
basket1.tstamp.GetCurrentTime()
票数 7
EN

Stack Overflow用户

发布于 2022-03-26 21:30:31

您还可以解析它:

代码语言:javascript
运行
复制
Timestamp().FromJsonString("2022-03-26T22:23:34Z")
票数 1
EN

Stack Overflow用户

发布于 2022-09-01 15:21:09

我发现这非常令人困惑,因为它与我的演示中分配其他值的方式不同,所以我想使用.FromDatetime()添加这个方法

.proto:

代码语言:javascript
运行
复制
message User {
    int64 id = 1;
    string first_name = 2;
    ...
    string phone_number = 7;
    google.protobuf.Timestamp created_on = 8; # <-- NB
}

响应UserMsgs.User()在这里是一个从上面的原型文件生成的类,并且知道每个字段的类型。

代码语言:javascript
运行
复制
def GetUser(self, request, context):
    response = UserMsgs.User()

    if request.id is not None and request.id > 0:
        usr = User.get_by_id(request.id)
        response.id = usr.id
        response.first_name = usr.first_name
        ...
        response.phone_number = str(usr.phone_number)
        response.created_on.FromDatetime(usr.created_on)  # <-- NB
    return response

因此,我们可以使用前面提到的内置函数response.created_on,而不是将=作为其他函数分配给这里。注意:注意日期时间的小写t。

在我的示例中,usr.created_on是python,它被分配给一个google.protobuf.Timestamp字段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65135205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档