我将一个变量存储到 MySQL 数据库中,字段类型VARCHAR(255)如下:ts, err := time.Parse(time.RFC3339, nonce[0:20])效果很好,显示如下:然后当我需要从数据库中获取它时,我会这样做:rows, err := db.Query("SELECT nonce, time FROM noncestore WHERE endpoint=?", endpoint) var sTimeStamp, nonceHolder string for rows.Next() { err = rows.Scan(&nonceHolder, &sTimeStamp) errCheck(err)Gives error//>> timeStamp, err := time.Parse(time.RFC3339, sTimeStamp) errCheck(err) if timeStamp == ts && nonceHolder == s { return errors.New("Nonce already used") } if now.Sub(timeStamp) < *maxNonceAge { _, err := db.Query("INSERT INTO noncestore SET nonce=?, time=?, endpoint=?", nonceHolder, sTimeStamp, endpoint) errCheck(err) } }上面提到的行给了我这个错误:2015/08/14 21:56:18 http: panic serving [::1]:49663: Failed: parsing time "2015-08-15 03:56:00" as "2006-01-02T15:04:05Z07:00": cannot parse " 03:56:00" as "T"为什么它能够将其转换RFC3339并存储在数据库中,但是当需要获取它并将其格式化为RFC3339以便我可以在我的 if 语句中使用时,我会收到错误消息?
1 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
看起来您的数据库驱动程序以 RFC3339 中没有的格式返回时间。而不是使用
timeStamp, err := time.Parse(time.RFC3339, sTimeStamp)
尝试使用
timeStamp, err := time.Parse("2006-01-02 15:04:05", sTimeStamp)
要记住的一件重要事情是数据库本身根本不会存储原始字符串,RFC3339 或其他。它有自己的内部时间表示,当您查询它时,您获得的值取决于该数据库希望如何将其重新呈现给您。在这种情况下,它选择了一种稍微不同的格式,我上面粘贴的格式字符串(以“2006-01-02...”开头的格式字符串)应该可以修复。是的,在 Go 中,日期格式字符串看起来就像日期本身。
- 1 回答
- 0 关注
- 173 浏览
添加回答
举报
0/150
提交
取消