登录
首页 >  Golang >  Go问答

将 HTML 日期时间转换为 Golang 时间对象

来源:stackoverflow

时间:2024-03-04 23:12:28 272浏览 收藏

大家好,我们又见面了啊~本文《将 HTML 日期时间转换为 Golang 时间对象》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我是 golang 初学者。 我正在尝试从 html 输入类型日期获取输入

并发布此创建方法

func (c *customercontroller) createcustomer(ctx *gin.context) {
    var customer customer
    if err := ctx.shouldbindjson(&customer); err != nil {
        ctx.json(http.statusbadrequest, gin.h{"error": err.error()})
        return
    }

    if err := c.service.createcustomer(customer); err != nil {
        ctx.json(http.statusinternalservererror, gin.h{"error": "failed to create customer"})
        return
    }

    ctx.status(http.statusok)
}

客户对象:

type Customer struct {
    ID        uint      `gorm:"primarykey"`
    FirstName string    `gorm:"type:varchar(100);not null"`
    LastName  string    `gorm:"type:varchar(100);not null"`
    BirthDate time.Time `gorm:"not null"`
    Gender    string    `gorm:"type:varchar(6);not null"`
    Email     string    `gorm:"type:varchar(100);not null;unique"`
    Address   string    `gorm:"type:varchar(200)"`
}

当我尝试添加新客户时,我收到 http 错误 400,因为 html 日期类型与 golang time 对象不匹配。 错误正文为 {"error":"parsing time \"2014-05-05\" as \"2006-01-02t15:04:05z07:00\": 无法将 \"\" 解析为 \"t\ ""} 我怎么解决这个问题? 提前致谢


正确答案


我收到 Http Error 400,因为 HTML 日期类型与 golang Time 对象不匹配。

请避免这样思考问题。

真正的问题是:

  1. 在客户端, 元素的解析值始终格式化为 yyyy-mm-dd (请参阅 的值)。
  2. 在服务器端,ctx.ShouldBindJSON 使用 encoding/json 包来解组请求,该包使用 (*Time).UnmarshalJSON 将时间解组为 time.Time 对象。 (*Time).UnmarshalJSON 要求时间必须是 RFC 3339 格式的带引号的字符串(即 2006-01-02T15:04:05Z07:00)(请参阅 (*Time).UnmarshalJSON)。

yyyy-mm-dd 格式的值不满足 2006-01-02T15:04:05Z07:00,这就是失败的原因。

要解决此问题,您可以在客户端将值转换为 RFC 3339 格式,或者实现 json.Unmarshaler接口支持服务器端的yyyy-mm-dd

一项提案支持 time.Format 的结构标记,如果实施后,该案的处理就变得容易了。该提案还展示了目前如何解决该问题。

最后一点是,在现实世界的应用程序中,您应该定义 BirthDate time.Time 的含义。例如,对时区 +07:00 的用户进行成像,表示其出生日期为 1990-05-21,并将该值存储到数据库中为 1990-05-20T17:00:00Z。随后,另一个用户在 -03:00 时区加载该用户的个人资料。您将在页面上显示什么?

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>