解决Golang time.Parse和time.Format的时区问题
作者:我要认真学习了 发布时间:2024-05-22 17:46:06
标签:Golang,time.Parse,time.Format,时区
一、问题描述
在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语言的诞生时间,一定要用这个日期格式化
以上为个人经验,希望能给大家一个参考,也希望大家多多支持asp之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/maqianQAQ/article/details/78705001


猜你喜欢
- 在数据库中有时我们可能需要对一些数据进行处理,例如四舍五入、直接舍去后面的几位等,其实很简单,都是有现成的函数,我们只需要套用就行了:sel
- --创建数据库(文件:主要数据文件mdf==1,次要数据文件ndf>=0,日志文件ldf>=1)--文件组:当1mdf,5个nd
- 学习完如何生成一个 excel 文件之后,接下来我们继续学习一下如何在 excel 文件中写入一个比较简单的图表,先来看一下所需要的几个函数
- 如何做一个树状展开视图来显示自己的记录结构?在SQL中,如何做一个可收起和展开树状结构图?就是资源管理器左栏的那种效果。这要用到Data s
- 当类间继承关系很简单时,super()的使用很简单。class A(object): def __init__(self): p
- tzset()方法重置所使用的库例程的时间转换规则。环境变量TZ指定如何完成此操作。TZ环境变量的标准格式(空格为清楚起见而加的
- 安装配置MongoDB驱动安装驱动go get -u github.com/mongodb/mongo-go-driver初始化模块go m
- select * from V$NLS_PARAMETERS; SQL> alter session set NLS_DATE_LAN
- 在SQL SERVER下跟踪sql采用事件探查器,而在mysql下如何跟踪sql呢? 其实方法很简单,开启mysql的日志log功能,通过查
- mysql高效查询mysql牺牲了group by来增加left join的速度(前提是加了索引)。user表:10万数据实例1: 200秒
- 环境配置1:安装mysql,环境变量添加mysql的bin目录环境配置2:python安装MySQL-Python请根据自身操作系统下载安装
- Py2 时代,访问 MySQL 数据库的模块除了 PyMySQL 和 MySQL-python 之外,还有以速度见长的 Umysql,以及非
- 在使用Python库时,常常会用到matplotlib.pyplot绘图,本文介绍在PyCharm及Jupyter Notebook页面中控
- 我采用的是MySQLdb操作的MYSQL数据库。先来一个简单的例子吧: import MySQLdb try: conn=MySQLdb.c
- 本文实例讲述了Python可变和不可变、类的私有属性。分享给大家供大家参考,具体如下:可变和不可变items = []print(id(li
- Update Tb_Garden1 G Set Steward = (Select Id From Zyq.Tb_User U Where
- 本文以实例演示5种验证码,并介绍生成验证码的函数。PHP生成验证码的原理:通过GD库,生成一张带验证码的图片,并将验证码保存在Session
- 我们在浏览网页的时候偶尔会遇到一些陌生的网页交互行为,通常情况下它们并不会影响你的正常使用,之所以出现情况往往是因为,设计师在设计某个交互方
- 快速掌握 Mysql数据库对文件操作的封装在查看Mysql对文件的操作中,它在不同的操作系统上对文件的操作,除了使用标准C运行库函数,包括o
- 一、控制用户存取 1、创建修改用户Creating Users Create/alter user new_user identified