【发布时间】:2019-08-03 23:59:42
【问题描述】:
我正在创建一个使用 GRPC 和 protobuf 的 Go 应用程序。我的 RPC 服务将接收包含 google.protobuf.Timestamp 类型的消息,对其进行解析并最终将其保存在数据库中或对其执行更多操作。
对于google.protobuf.Timestamp 类型的有效输入,我感到困惑。我希望对带有时区偏移的日期时间戳使用以下格式。
2019-02-15T13:00:00+01:00
这是我正在使用的 proto 文件。
syntax = "proto3"
package example;
import "google/protobuf/timestamp.proto"
service Tester {
rpc ParseDateTimeStamp(TSRequest) returns (TSReply) {}
}
message TSRequest {
google.protobuf.Timestamp dts = 1;
}
message TSReply {
string message = 1;
}
问题是当我向 GRPC 服务器发送包含日期时间戳的消息时。我希望给定的2019-02-15T13:00:00+01:00 datetimestamp 的类型*tsbp.Timestamp 是有效的,并给我从纪元开始的适当秒数。 (从 timestamp.go 调用 GetSeconds() 之后)
对于上面的示例输入,调用 ptypes.TimestampString(ts *tspb.Timestamp) 返回 1970-01-01T00:00:00Z。
google.protobuf.Timestamp 是否接受带有 +- 偏移量的日期时间戳?
或者我是否必须将输入输入为 String 类型,然后使用 time.Format 解析为 time.Time 而不是在 protobuf 中使用时间戳变量类型?如果是这样,你能提供一个例子吗?
【问题讨论】:
-
在返回
TSReply消息时 - 您是否希望它包含原始时区偏移量?如果是这样,您的输入值ptype.Timestamp没有存储 TZ 值,因此任何偏移量都需要包含在额外的字段中。
标签: go protocol-buffers grpc-go