如果你升级使用了较为新版xorm(如v0.6.3)和go-sql-driver(如v1.3)的go类库,那么你就可能会遇到时区问题。 如

time.Parse(“2006-01-02 15:04:05” ,“2018-01-15 12:11:12”) // 2018-01-15T12:11:12+00:00
写入是数据库时候就会被改变为2018-01-15T20:11:12+00:00。
上述的就是时区问题,因为我们使用的是东8时区,默认会被设置为0时区,解决方案很简单,只需要在main函数中或者main包中初始化时区:

time.LoadLocation(“Asia/Shanghai”)
数据库配置为

root:root@tcp(127.0.0.1:3306)/test?charset=utf8&interpolateParams=true
xorm的初始化修改为:

orm, err := initOrm(ds, maxIdleConn, maxOpenConn, debug)
if err != nil {
return nil, err
}
r.Value = orm
orm.DatabaseTZ = time.Local // 必须
orm.TZLocation = time.Local // 必须
orm.SetMaxIdleConns(maxIdleConn)
orm.SetMaxOpenConns(maxOpenConn)
字符串转换时间也需要改为

time.ParseInLocation(“2006-01-02 15:04:05” ,“2018-01-15 12:11:12”,time.Local)
此时写库时区问题就可以得到解决了,但是读库问题如下的的方式:

rss, err := this.Repo.Query(ctx, sqlStr, pos, now, os)
images := make([]*models.ImageConf, 0, len(rss))

for _, rs := range rss {
var tmpImage models.ImageConf
MapToStruct(rs, &tmpImage)
images = append(images, &tmpImage)
}

func MapToStruct(mapping map[string][]byte, j interface{}) {
elem := reflect.ValueOf(j).Elem()
for i := 0; i < elem.NumField(); i++ {
var key string
key = elem.Type().Field(i).Name
switch elem.Field(i).Interface().(type) {
case int, int8, int16, int32, int64:
x, _ := strconv.ParseInt(string(mapping[key]), 10, 64)
elem.Field(i).SetInt(x)
case string:
elem.Field(i).SetString(string(mapping[key]))
case float64:
x, _ := strconv.ParseFloat(string(mapping[key]), 64)
elem.Field(i).SetFloat(x)
case float32:
x, _ := strconv.ParseFloat(string(mapping[key]), 32)
elem.Field(i).SetFloat(x)
case time.Time:
timeStr := string(mapping[key])
timeDB, err := time.ParseInLocation(“2006-01-02 15:04:05”, timeStr, time.Local)
if err != nil {
timeDB, err = time.ParseInLocation(“2006-01-02”, timeStr, time.Local)
if err != nil {
timeDB, err = time.ParseInLocation(“15:04:05”, timeStr, time.Local)
} else {
timeDB = time.Date(0, 0, 0, 0, 0, 0, 1, time.Local)
}
}
elem.Field(i).Set(reflect.ValueOf(timeDB))
}
}
}
其中MapToStruct函数中的time.Time类型这儿有一个需要我们注意的,如果配置的数据库为

root:root@tcp(127.0.0.1:3306)/test?charset=utf8&interpolateParams=true&parseTime=true&loc=Local
多出了&parseTime=true&loc=Local此时timeStr := string(mapping[key])得到的将会是2006-01-02T15:04:05+08:00。
那么你的转换格式应该为2006-01-02T15:04:05+08:00。

总结一下:

在项目中时区一定要在项目初始化时候就已经设置好
字符串转换时间尽可能使用time.ParseInLocation
parseTime=true&loc=Local或者parseTime=true&loc=Asia%2FShanghai对xorm解析时间类型为map[string][]byte有着影响

原文链接

https://blog.51cto.com/qiangmzsx/2061278

服务推荐

  • 蜻蜓代理
  • 代理ip
  • 微信域名拦截检测
  • 微信域名检测api

解决XORM的时区问解决XORM的时区问题题vvvv相关推荐

  1. (77)FPGA时序违例及解决办法-面试必问(一)(第16天)

    (77)FPGA时序违例及解决办法-面试必问(一)(第16天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)FPGA时序违例及解决办法-面试必问(一)(第16天 ...

  2. AlphaGo之父哈萨比斯: 先解决智能 再用智能解决一切

    AlphaGo之父哈萨比斯: 先解决智能 再用智能解决一切 2017年06月01日 06:56 第一财经日报 33微博微信空间分享添加喜爱 刘佳 ["我的背景很多元化.不要循规蹈矩,走自己的 ...

  3. 如何解决编译linux内核(解决声卡问题),遭遇fatal error: linux/limits.h: 没有那个文件或目录

    如何解决编译linux内核(解决声卡问题),遭遇fatal error: linux/limits.h: 没有那个文件或目录 参考文章: (1)如何解决编译linux内核(解决声卡问题),遭遇fata ...

  4. html2canvas+jspdf 完美解决html导出且分页 解决图片显示不全问题

    html2canvas+jspdf 完美解决html导出且分页 解决图片显示不全问题 参考文章: (1)html2canvas+jspdf 完美解决html导出且分页 解决图片显示不全问题 (2)ht ...

  5. mysql utf8mb4 错_MYSQL保存特殊字符失败,用编码utf8mb4解决错误 Incorrect string value ...解决方法...

    <MYSQL保存特殊字符失败,用编码utf8mb4解决错误 Incorrect string value ...解决方法>要点: 本文介绍了MYSQL保存特殊字符失败,用编码utf8mb4 ...

  6. 笔记本电脑键盘输入错误如何解决 电脑按键错乱的解决方法步骤

    笔记本电脑键盘输入错误如何解决 电脑按键错乱的解决方法步骤 我们的生活中越来越离不开电脑,但在使用电脑的过程中总会遇到各种各样的问题.知识屋致力于给电脑小白朋友们介绍一些简单常用问题的解决方法,这次给 ...

  7. Microsoft Edge 和 Google Chrome更新后,出现错误代码:STATUS_STACK_BUFFER_OVERRUN,有效解决办法记录【已解决】

    Microsoft Edge 和 Google Chrome更新后,出现错误代码:STATUS_STACK_BUFFER_OVERRUN,有效解决办法记录[已解决] Google Chrome网页错误 ...

  8. 利用循环解决矩阵nan值(错误解决)

    做的算法里面矩阵经常会出现nan,每一列的值也要求不一样,所以尝试利用循环解决一下问题. try 1 :for 里面用a(isnan(a))=b a=[nan nan nan;1 1 1;0 0 0] ...

  9. Spring循环依赖问题,循环依赖的情况,能解决的情况,怎么解决的

    目录 Spring中依赖注入的方式 循环依赖的种类 Spring能解决哪些循环依赖 单例模式下的构造器注入循环依赖问题Spring无法解决 单例模式下的接口注入循环依赖问题Spring能解决 单例模式 ...

最新文章

  1. Python中将数据矢量化运算所带来的时间加快
  2. JedisConnectionException: java.net.SocketException: Broken pipe
  3. python基础教程:3种控制流语句(if,for,while)
  4. 新手学java_新手如何学习Java
  5. CodeForces - 1305C Kuroni and Impossible Calculation(鸽巢原理)
  6. matlab this指针,C++ this指针(直戳本质)
  7. Laravel使用EasyWechat 进行微信支付
  8. python matplotlib 柱状图点击事件_Python:matplotlib分组Bar柱状图
  9. 黑白染色——封锁阳光大学
  10. 第二篇:浅谈自定义头文件可能导致的重定义问题
  11. IEnumerator和IEnumerable
  12. BarTender怎样同时打印自动日期和流水号?
  13. python画spc控制图_SPC控制图的制作方法和步骤
  14. springboot之设置mybatis打印sql输出
  15. ACM:《挑战程序设计竞赛》
  16. 毕业设计 : 基于LSTM的文本情感分类 - 情感分类 情感分析 lstm
  17. 【WebGoat习题解析】Parameter Tampering-Bypass HTML Field Restrictions
  18. PacketTracer简单使用】
  19. Linux(九、十)文件权限及网络配置管理
  20. 前端模板template-web简单使用

热门文章

  1. 学习笔记javaSE---集合
  2. iPhone4S价格走势平稳 现价5999值得买
  3. Delphi中ComPort串口控件通信中的数据处理
  4. 赛宁网安荣获国贸集团2022网络安全演练活动“优秀保障奖”
  5. jQuery日历插件FullCalendar使用方法
  6. 阿里巴巴Java开发手册快速学习
  7. 实现一个自动搜狗搜索的小爬虫----user-agent反爬
  8. 读书笔记-人月神话3
  9. 华钜同创:各大卖家提前备货万圣节,再不准备就晚啦!
  10. 拉盖尔多项式 matlab,类氢原子的定态波函数