当前位置: 首页 > news >正文

golang时间问题汇总(用法常见问题:插入数据库时间自动+8)

golang时间问题汇总(用法&常见问题)

1 用法

1.1 time.Parse()

func main() {timeStr := "2023-09-26 20:56:23"allDate, _ := time.Parse("2006-01-02 15:04:05", timeStr)fmt.Println("全部解析=", allDate) timeStr = "2023-09-26 20:56:00"miDate, _ := time.Parse("2006-01-02 15:04:00", timeStr)fmt.Println("解析到分钟=", miDate)timeStr = "2023-09-26 20:00:00"hDate, _ := time.Parse("2006-01-02 15:00:00", timeStr)fmt.Println("解析到小时=", hDate)/*运行结果:全部解析= 2023-09-26 20:56:23 +0000 UTC解析到分钟= 2023-09-26 20:56:00 +0000 UTC解析到小时= 2023-09-26 20:00:00 +0000 UTC*/
}

1.2 time.ParseInLocation()

func main() {//带有时区解析timeStr := "2023-09-26 20:56:23"date, _ := time.ParseInLocation("2006-01-02 15:04:05", timeStr, time.Local)//loc, _ := time.LoadLocation("Asia/Shanghai")//date, _ := time.ParseInLocation("2006-01-02 15:04:05", timeStr, loc)//结果: 由于time.Local会匹配我们本地时区所以在这里和我们指定时区效果一样//date= 2023-09-26 20:56:23 +0800 CSTfmt.Println("带有时间区间解析之后, date=", date)
}

1.3 Truncate()、Add()、Sub()

func main() {timeStr := "2023-09-26 20:56:23"date, _ := time.ParseInLocation("2006-01-02 15:04:05", timeStr, time.Local)fmt.Println("before truncate hour, date=", date)date = date.Truncate(time.Hour)fmt.Println("after truncate, date=", date)date = date.Add(time.Duration(-2) * time.Hour)fmt.Println("sub 2 hour, date=", date)date = date.Add(time.Hour * 2)fmt.Println("add 3 hour, date=", date)/*before truncate hour, date= 2023-09-26 20:56:23 +0800 CSTafter truncate, date= 2023-09-26 20:00:00 +0800 CSTsub 2 hour, date= 2023-09-26 18:00:00 +0800 CSTadd 3 hour, date= 2023-09-26 20:00:00 +0800 CST*/start, _ := time.Parse("2006-01-02 15:04:05", "2023-09-25 20:56:23")end, _ := time.Parse("2006-01-02 15:04:05", "2023-09-27 20:56:23")duration := end.Sub(start)//相差时间:48h0m0sfmt.Println("duration=", duration) }

2 常见问题

2.1 插入数据库之后时间会自动+8

原因:时区问题,在通过xorm操作mssql时,插入之前是10:00,但是插入数据库之后变成了18:00;观察sql也发现时间由10:00变成了18:00

  • 在golang中可以通过time.ParseInLocation指定时区来解决
func main() {timeStr := "2023-09-26 20:56:23"date, _ := time.ParseInLocation("2006-01-02 15:04:05", timeStr, time.Local)// date= 2023-09-26 20:56:23 +0800 CSTfmt.Println("加载指定时区, date=", date)//或者手动修复时区,手动修补时间local := time.FixedZone("CST", 8*3600)now := time.Now().In(local).Format("2006-01-02 15:04:05")// 2023-09-26 22:59:09fmt.Println("now=", now)
}
http://www.lryc.cn/news/177295.html

相关文章:

  • TCP网络连接中的三次握手和四次挥手
  • 游戏服务商Latis Global参展2023 ChinaJoy B2B
  • oracle常用sql
  • 手游模拟器长时间运行后,游戏掉帧且不恢复
  • linux下离线安装telnet
  • Unity 发布WebGL平台,C#与JavaScript交互
  • 利用 Forcing InnoDB Recovery 特性解决 MySQL 重启失败的问题
  • windows修改键位F11变insert(改键盘映射)
  • 安装gpu版本的paddle和paddleclas
  • 61从零开始学Java之处理大数字相关的类有哪些?
  • vscode 搜索界面的files to include files to exclude 是什么功能?
  • 数据计算-第15届蓝桥杯第一次STEMA测评Scratch真题精选
  • 谈谈前端和后端的选择
  • Vue3最佳实践 第六章 Pinia,Vuex与axios,VueUse 1(Pinia)
  • Java比较器之equals、comparable、comparator
  • Virtio-user使用简介
  • 点云从入门到精通技术详解100篇-基于深度学习的三维植物点云分割网络
  • C语言 Cortex-A7核 SPI 实验
  • Spring工具类--ReflectionUtils的使用
  • zemax西德莫尔目镜
  • C++ 拷贝构造函数
  • 怎么使用 Flink 向 Apache Doris 表中写 Bitmap 类型的数据
  • LeetCode 四数相加II 哈希
  • python(自4) xpath下载 lxml安装 lxml语法 使用方式
  • 05-Zookeeper典型使用场景实战
  • stl格式-3D三角形
  • 基于微信小程序的高校暑期社会实践小程序设计与实现(源码+lw+部署文档+讲解等)
  • ARM-day2
  • macOS Sonoma 14 正式版(23A344)发布,附黑/白苹果镜像下载地址
  • HarmonyOS开发:封装一个便捷的Log工具类