【问题标题】:Golang inserting time.Now into database being shifted to UTCGolang 插入 time.Now 到数据库中被转移到 UTC
【发布时间】:2016-11-22 19:55:06
【问题描述】:

我正在尝试在数据库中插入一个 time.Now() 字段,但不断发生的事情是将时间向前移动到 UTC。我理解这个想法是始终如此,然后在向用户展示时转换为本地时间。问题是我继承了这个系统,而且目前还很容易改变。

有什么建议吗?我看到您可以在 DSN 中设置 loc,但它没有说明将其更改为什么或实际效果,因此我将不胜感激那里的信息。

编辑:一些信息,它是 MySQL DB,使用 go-mysql 1.1 和 go 1.6.3。正在将数据插入到 DATETIME 字段中。

插入时数据不正确。 GORM Debug 显示一次,MySQL 查询记录器显示它向前移动。

我发现问题在于 go-mysql 驱动程序自动将时间转换为 UTC,这可以使用 DSN 中的 loc 参数进行更改。然而,这也会改变返回时间的方式。

要解决此问题,请将 loc=Local 添加到您的 DSN。

【问题讨论】:

  • 什么是数据库?接收日期的列的数据类型是什么?您可以在向用户展示时显示您正在使用的代码吗?
  • 回显@Mark - 听起来您认识到数据库字段需要保持UTC,因此您需要调整插入和选择语句。这是大多数开发人员中非常常见的问题(将日期时间值转换为本地表示)。

标签: go go-gorm


【解决方案1】:

因为 golang 解析中的时间将使用 UTC

【讨论】:

    【解决方案2】:

    这是我用来始终存储当地时间的方式。即使您的 VPS 位于另一个时区国家/地区也能正常工作:

    db, err = gorm.Open("mysql", "root:@tcp(localhost:3306)/mydatabase?charset=utf8&parseTime=True&loc=America%2FSao_Paulo")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多