V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
javalaw2010
V2EX  ›  Go 编程语言

关于 golang mysql 驱动 parseTime 的设计感觉有点奇怪

  •  
  •   javalaw2010 · 13 小时 6 分钟前 · 267 次点击

    众所周知:parseTime 参数为 true 时,驱动会将 date/datetime/timestamp 类型根据 loc 时区解析成 time.Time 类型之后再返回。

    timestamp 类型字段没什么疑议,本身底层是一个 unix 时间戳。

    但是 date/datetime 类型本身只是一种时间表达方式。假设我有两条数据,虽然可能存储的都是“2025-09-19 14:44:00”的时间,但是业务层面,有可能一条的时区是 Asia/Shanghai, 另一条的时区是 Asia/Tokoyo ,我认为这个地方更适合交由业务层自行处理啊,如果用上 time.Time ,时区就会非常混乱,这里面会涉及到存储时的时区/数据库时区/服务器时区/DSN 中的 LOC 时区,非常折磨人啊。驱动也不提供单独解析 timestamp 类型的能力。

    1 条回复    2025-09-19 22:43:01 +08:00
    dssxzuxc
        1
    dssxzuxc  
       5 小时 14 分钟前
    别瞎搞这些有的没的。
    服务器和数据库统一使用 UTC ,时间戳展示交给客户端。
    datetime 没有时区,因此不建议用于有时区要求的场景。
    如果想用 datetime 处理,设计接口时要额外传输时区信息,然后服务端转换成 UTC 时间,请求数据时转换成 Unix 让客户端自行处理。
    当然这里存在一个问题,服务端完全丢失了该条数据的时区信息,如果业务有需要,再增加一个 timezone 字段。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   912 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:57 · PVG 03:57 · LAX 12:57 · JFK 15:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.