[gogf/gf]gf-cli创建model时,do目录下struct中的时间字段设置为interface{}

2024-07-09 797 views
4

gf-cli创建model时,do目录下struct中的时间字段设置为interface{} https://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html

type AccountInfo struct {
    g.Meta               `orm:"table:account_info, do:true"`
    Id                   interface{} // 主键id
    AccountNo            interface{} // account_base.account_no
    CorporateName        interface{} // 公司名称
    CorporateShorterName interface{} // 公司简称
    BusinessLicenseNo    interface{} // 营业执照编码
    LiaisonMan           interface{} // 联络人
    LiaisonPhone         interface{} // 联系电话
    LiaisonAddress       interface{} // 联系地址
    CreateTime           *gtime.Time // 创建时间
    ModifyTime           *gtime.Time // 更新时间
}

如果设置为接口类型,方便时间上带小数位的操作,这样可以赋值为gdb.Raw("current_timestamp(6)")

https://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_date-format %f | 微秒 ( 000000.. 999999)

回答

3

处理:方案一,gtime 支持设置微妙参数;方案二,修改生成的模板

6
fmt.Println("id:", i, " time:", gtime.Now().Format("Y-m-d H:i:s.u")) // 2022-03-15 15:27:18.328
fmt.Println("id:", i, " time:", time.Now().Format(time.StampMicro))  // Mar 15 15:27:18.328508
fmt.Println("id:", i, " time:", gtime.Now().Format(time.StampMicro)) // Jpm3 _2 15:04:05.000000

暂时可以使用官方的time.Now().Format(time.StampMicro))转成字符串,但是时间格式转化为*Time对象时就丢失了小数位

7

参照php的format .v才是返回三位 .u应该返回六位才对

2

mysql 官方是%f,示例可以生成字符串类型的,但是字符串转对象的时候 丢失了精度了

fmt.Println(gtime.Now().FormatNew("Y-m-d H:i:s.u"))
fmt.Println(gtime.Now().FormatTo("Y-m-d H:i:s.u"))

gtime.time对象丢失小数位精度

7

@houseme @LonelySally 写入时间丢失精度的问题出在这里,主要是为了保证写入时间和当前程序时区一致,所以采用了字符串转换: image