我创建了一个结构,它包含两个时间。时间格式的字段,以 json 标记命名:start_time和end_time。type MyStruct struct { StartTime time.Time `json:"start_time"` EndTime time.Time `json:"end_time"`}当我尝试使用gin框架通过HTTP发送PUT请求以更新这些值时,我发送的时间格式在发送的结构中发生了变化。我发送的内容:curl -X PUT -H 'Content-Type: application/json'http://my_address -d '{"start_time": "2021-04-27T22:24:31Z","end_time": "2021-11-01T22:24:31Z"}'它接收的内容:start_time="2021-04-27 22:24:31 +0000 UTC",end_time="2021-11-01 22:24:31 +0000 UTC",另一方面,我将结构保存在沙发库中,作为查询的返回值,我正在发回文档(我的结构):我的查询:Update BucketName as eset start_time="2021-04-27 22:24:31 +0000 UTC",end_time="2021-11-01 22:24:31 +0000 UTC" where ( my document equality condition)returning e并且它执行时没有错误。当我尝试读取返回的结构时,我的代码来阅读它:var s domain.MyStructSample // err = result.One(&s) if err != nil { if err == gocb.ErrNoResult { return nil, errors.New("there is no result") } logger.ZSLogger.Errorf("error on update one item from my struct with error :%s", err) return nil, err } gocb在这些时间项上生成错误,这是错误:"message":"error on update one item from my struct with error :parsing time \"\"2021-11-01 22:24:31 +0000 UTC\"\" as \"\"2006-01-02T15:04:05Z07:00\"\": cannot parse \" 22:24:31 +0000 UTC\"\" as \"T\""}顺便说一句,正如我所说,更新是在没有错误的情况下完成的(查询执行没有错误)。那么我该怎么办?
1 回答

绝地无双
TA贡献1946条经验 获得超4个赞
您是如何生成此查询的:
Update BucketName as e
set start_time="2021-04-27 22:24:31 +0000 UTC",
end_time="2021-11-01 22:24:31 +0000 UTC" where ( my document equality condition)
returning e
正如错误所说,存储在couchbase中的时间数据应该采用RFC3339()格式,而不是默认格式,所以也许你应该用quer插入数据:2006-01-02T15:04:05Z07:002006-01-02 15:04:05 -0700 MST
Update BucketName as e
set start_time="2021-04-27T22:24:31Z07:00",
end_time="2021-11-01T22:24:31Z07:00" where ( my document equality condition)
returning e
如果您在格式化时间时遇到问题,请阅读文档 https://golang.cafe/blog/golang-time-format-example.html
而且,正如@MrFuppes注释的那样,如果您需要自定义JSON输出格式,请阅读此如何在传出JSON中格式化时间戳
- 1 回答
- 0 关注
- 155 浏览
添加回答
举报
0/150
提交
取消