首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Go MySql驱动程序没有正确设置时间

Go MySql驱动程序没有正确设置时间
EN

Stack Overflow用户
提问于 2016-11-07 19:58:45
回答 1查看 8.2K关注 0票数 8

我一直在开发一种微服务,它可以在golang中与mysql交互一段时间,我喜欢这种有才华的语言。无论如何,有一个问题,不知道哪里是问题,在我的代码,在mysql驱动程序的其他mysql。所以我的机器时区utc+3,我分享一些结果可能会有所帮助

代码语言:javascript
运行
复制
//created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
mysql> select now();
"2016-11-07 22:43:02", //that is correct.

进入围棋

代码语言:javascript
运行
复制
fmt.PrintLn(time.Now().Local())
"2016-11-07 22:51:02" //that is correct too

但是,当我将实体添加到db中时,mysql工作台显示了错误的日期时间。

代码语言:javascript
运行
复制
"2016-11-07 19:51:02" // 

Go代码:

代码语言:javascript
运行
复制
func (this *AppLogHandler) addLog(_log *AppLog) (int64, error){
    fmt.Println("addLog")
    db:= this.Context.DB
    stmt, err := db.Prepare("INSERT tbl_logs SET user_id=?,ip_proxy=?, ip_original=?, end_point=?, http_method=?, message=?, status=?, created_date=?")
    if(err != nil){
        log.Println(err)
        return -1, err
    }
    defer stmt.Close()
    res, err := stmt.Exec(&_log.UserID, &_log.IPProxy, &_log.IPOriginal, &_log.Endpoint, &_log.HttpMethod, &_log.Message, &_log.Status, &_log.CreatedDate)
    if(err != nil){
        log.Println(err)
        return -1, err
    }
    return res.LastInsertId()
}

/// some code here
    app_log := AppLog{}
    app_log.IPProxy = r.RemoteAddr
    app_log.IPOriginal = r.Header.Get("X-Forwarded-For")
    app_log.CreatedDate = time.Now().Local()
    app_log.UserID = user_id
    app_log.Endpoint = r.URL.Path
    app_log.HttpMethod = r.Method
    fmt.Println(app_log.CreatedDate)
    return this.addLog(&app_log)

伙计们我需要你们的帮助。我好几个小时都解决不了这个问题。

代码语言:javascript
运行
复制
mysql=>  Ver 14.14 Distrib 5.7.15, for osx10.11 (x86_64) using  EditLine wrapper
go => 1.7
mysql driver => 1.2, https://github.com/go-sql-driver/mysql/
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-08 02:51:56

mysql驱动程序有一个默认时区的配置参数。,您可以将其设置为time.Local (默认为time.UTC)。当您保存值时,它首先是将时间戳转换为UTC时区。,然后将其发送到数据库。

正如注释中已经指出的,一种更健壮的方法是接受默认的Loc,并在数据库中对UTC进行标准化。这大大简化了与数据计算相关的任何事情,如果您只是在显示值时将数据从UTC转换为本地,则不会对查看数据的人的时区做出假设。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40473565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档