为什么JSON绑定中时间格式会发生变化?

我创建了一个结构,它包含两个时间。时间格式的字段,以 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 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

并且它执行时没有错误。当我尝试读取返回的结构时,


我的代码来阅读它:


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\""}

顺便说一句,正如我所说,更新是在没有错误的情况下完成的(查询执行没有错误)。那么我该怎么办?


拉丁的传说
浏览 156回答 1
1回答

绝地无双

您是如何生成此查询的: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正如错误所说,存储在couchbase中的时间数据应该采用RFC3339()格式,而不是默认格式,所以也许你应该用quer插入数据:2006-01-02T15:04:05Z07:002006-01-02 15:04:05 -0700 MSTUpdate BucketName as eset 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中格式化时间戳
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go