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

作者:我要认真学习了 时间:2024-05-22 17:46:06 

一、问题描述

在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

标签:Golang,time.Parse,time.Format,时区
0
投稿

猜你喜欢

  • 超链“确认”对话框confirm

    2008-05-16 11:42:00
  • 全面了解构造函数继承关键apply call

    2024-04-16 10:36:07
  • Django 用户登陆访问限制实例 @login_required

    2021-05-26 07:31:22
  • 图片自适应宽度新解决方法

    2009-09-22 14:55:00
  • SQL 存储过程基础语法之一

    2024-01-26 19:58:05
  • 你是真正的用户体验设计者吗? Ⅵ

    2008-04-19 18:23:00
  • Python 面向对象静态方法、类方法、属性方法知识点小结

    2022-02-10 07:45:52
  • python面向对象之类属性和类方法案例分析

    2022-01-18 06:00:36
  • Django Channels 实现点对点实时聊天和消息推送功能

    2022-04-03 10:37:56
  • 详解监听MySQL的binlog日志工具分析:Canal

    2024-01-27 11:00:35
  • 解决Python复杂zip文件的解压问题

    2021-08-11 05:04:09
  • PyQt5使用mimeData实现拖拽事件教程示例解析下

    2021-02-15 11:09:03
  • 在Python中处理时间之clock()方法的使用

    2021-09-22 06:07:26
  • tensorflow2.0如何实现cnn的图像识别

    2022-05-01 21:19:58
  • sqlserver中去除字符串中连续的分隔符的sql语句

    2012-06-06 20:07:39
  • 跟老齐学Python之总结参数的传递

    2021-12-16 18:17:24
  • MySQL中的 Binlog 深度解析及使用详情

    2024-01-19 04:15:48
  • Python使用POP3和SMTP协议收发邮件的示例代码

    2023-10-03 15:37:28
  • python ftplib模块使用代码实例

    2023-04-17 10:19:49
  • oracle scott 解锁步骤

    2024-01-21 10:27:30
  • asp之家 网络编程 m.aspxhome.com