解决Golang time.Parse和time.Format的时区问题


Posted in Golang onApril 29, 2021

一、问题描述

在windows下,time.Parse()的时区和time.Format()的时区是一致的。

但是在linux环境下,time.Parse()的默认时区是UTC,time.Format()的时区默认是本地,两者如果不处理好就会导致错误。

package main
import "time"
import "fmt"
func main(){
    t, err := time.Parse("2006-01-02 15:04:05", "2017-12-03 22:01:02")
    if err != nil{
        fmt.Println(err)
        return
    }
    fmt.Println(t)
    fmt.Println(time.Now())
    fmt.Println(time.Now().Sub(t).Seconds())
}

输出:

2017-12-03 22:01:02 +0000 UTC

2017-12-03 22:15:26.592204446 +0800 CST m=+0.003020091

-27935.407549533

很明显能看到两者的时区不同并且如果把两者时间相减结果也不符合预期。

二、解决方法

使用time.ParseInLocation()而不是time.Parse():

package main
import "time"
import "fmt"
func main(){
    localTime, err := time.ParseInLocation("2006-01-02 15:04:05", "2017-12-03 22:01:02", time.Local)
    if err != nil{
        fmt.Println(err)
        return
    }
    fmt.Println(localTime)
    fmt.Println(time.Now())
    fmt.Println(time.Now().Sub(localTime).Seconds())
}

结果:

2017-12-03 22:01:02 +0800 CST

2017-12-03 22:18:26.288174547 +0800 CST m=+0.001532618

1044.288357362

补充:最自恋的golang的time.Format的坑

我想格式化输出日期

fmt.
  Println
  (time.
  Now
  ().
  Format
  (
  "2010-10-10 15:04:05"
  ))

结果输出了

9060-60-60 11:11:36

这什么鬼

百度了一个

fmt.
  Println
  (time.
  Now
  ().
  Format
  (
  "2006-01-02 15:04:05"
  ))

这就输出正确了

2017-06-09 11:12:39

为什么呢,没有问题什么,因为go语言最自恋最贱,据说那个日期是GO语言的诞生时间,一定要用这个日期格式化

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Golang 相关文章推荐
Go语言中break label与goto label的区别
Apr 28 Golang
解决golang post文件时Content-Type出现的问题
May 02 Golang
go语言基础 seek光标位置os包的使用
May 09 Golang
Golang中异常处理机制详解
Jun 08 Golang
修改并编译golang源码的操作步骤
Jul 25 Golang
Go语言并发编程 sync.Once
Oct 16 Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 Golang
Golang 遍历二叉树
Apr 19 Golang
Golang map映射的用法
Apr 22 Golang
Golang 实现WebSockets
Apr 24 Golang
Go语言入门exec的基本使用
May 20 Golang
详解Go语言中配置文件使用与日志配置
Jun 01 Golang
Golang 使用Map实现去重与set的功能操作
Apr 29 #Golang
使用Golang的channel交叉打印两个数组的操作
Apr 29 #Golang
Go使用协程交替打印字符
Apr 29 #Golang
golang goroutine顺序输出方式
Apr 29 #Golang
golang 在windows中设置环境变量的操作
解决golang在import自己的包报错的问题
golang import自定义包方式
You might like
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
2015/10/23 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
vue 更改连接后台的api示例
2019/11/11 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
python 切片和range()用法说明
2013/03/24 Python
Python使用新浪微博API发送微博的例子
2014/04/10 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
Django开发的简易留言板案例详解
2018/12/04 Python
python读取几个G的csv文件方法
2019/01/07 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
好矿嫂事迹材料
2014/01/21 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
《英英学古诗》教学反思
2014/04/11 职场文书
地球上的星星观后感
2015/06/02 职场文书
追讨欠款律师函
2015/06/24 职场文书
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android
Python加密与解密模块hashlib与hmac
2022/06/05 Python
app场景下uniapp的扫码记录
2022/07/23 Java/Android