我正在使用golang开发一个中间件。我正在使用REST-API,它以LocalDateTime的形式返回日期(例如"created":"2022-01-09T00:00:00“),它应该被映射到一个带有数据类google/protobuf/timestamp.proto的原型消息中,因为我们不想在前端进行转换。但显然timestamp.proto只支持带有时区的DateTime (类似于“创建”:“2022-01-09T00:00:00Z.”)但由于它是我正在消费的外部API,我不能将它们的数据类型更改为DateTime。有没有人知道如何找到优雅的解决方案,而不需要手动完成完整的映射/解压缩过程?
这就是原型消息: google.protobuf.Timestamp created =7 json_name = "created";
这是我们使用的unmashaller : err = protojson.Unmarshal(body,protoMessageClass)
这就是我得到的错误:错误:proto:(行.):无效的google.protobuf.Timestamp值“2021-12-07T00:00:00”
发布于 2022-01-11 18:36:59
首先,将以字符串形式接收的时间转换为time.Time
对象:
t, err := time.Parse("2006-01-02T15:04:05", val)
这里,"2006-01-02T15:04:05"
表示您期望的布局。
然后可以使用时间戳b内置函数从time.Time
对象创建protobuf时间戳:
tpb := timestamppb.New(t)
如果需要相反的操作,可以从timestampb.Timestamp
类型使用timestampb.Timestamp
类型的format
,然后使用time.Time
对象中的format
来生成字符串。
https://stackoverflow.com/questions/70666340
复制相似问题