首页 > 其他分享 >golang 时间比对时,time.Now()与time.Parse()的使用注意

golang 时间比对时,time.Now()与time.Parse()的使用注意

时间:2024-03-07 14:46:00浏览次数:27  
标签:golang 00 03 Parse time 2024 Now

在11:28时执行以下代码

nowTime := time.Now()
t1, err := time.Parse("2006-01-02 15:04", "2024-03-07 08:00:00")
result := nowTime.Before(t1)

本以为result应该是false,结果竟然是true。

  

调试下看看两者的区别发现:

time.Parse()是UTC时间,无时区信息,如:time.Time(2024-03-07T08:00:00Z){wall: 0, ext: 63845395200, loc: *time.Location nil}
time.Now()是本地时间,有时区信息,如:time.Now():time.Time(2024-03-07T11:28:29+08:00, +11732401) {wall: 13939321407022326624, ext: 11732401, loc: *time.Location:{ name:"Local",zone:[{name: "CST", offset: 28800, isDST: false}] } }

两者做时间比较时,time.Now()的时间会去掉时区差,即减去8小时,变成2024-03-07 03:00:00。导致2024-03-07T11:28:29+08:00早于2024-03-07T08:00:00Z。

 

两种方式解决:

1. time.Now()的时间格式化掉时区信息。

nowTime := time.Now()
t1, errr := time.Parse("2006-01-02 15:04:05", nowTime.Format("2006-01-02 15:04:05"))

 

2.将time.Parse()改用time.ParseInLocation()设置时区得到本地时间。

local, _ := time.LoadLocation("Asia/Shanghai")//local, _ := time.LoadLocation("Local")
t1, err := time.ParseInLocation("2006-01-02 15:04:05", "2024-03-07 08:00:00", local) 

 

标签:golang,00,03,Parse,time,2024,Now
From: https://www.cnblogs.com/yylyhl/p/18058723

相关文章

  • [转]Golang atomic.CompareAndSwapInt64()实例讲解
     原文: http://www.manongjc.com/detail/30-anadyrrwgsoebxp.html-------------- 在Go语言中,原子包提供lower-level原子内存,这对实现同步算法很有帮助。Go语言中的CompareAndSwapInt64()函数用于对int64值执行比较和交换操作。此函数在原子包下定义。在这里,您需要导入“syn......
  • Golang使用Goroutine实现筛素数
    //Copyright2009TheGoAuthors.Allrightsreserved.//UseofthissourcecodeisgovernedbyaBSD-style//licensethatcanbefoundintheLICENSEfile.packagemainpackagemainimport"fmt"//Sendthesequence2,3,4,...tochannel&......
  • golang进阶之接口
    目录一、接口二、为什么要使用接口三、接口的定义四、实现接口的条件五、接口类型的变量1.值接收者实现接口2.指针类型接收者实现接口3.接口进阶示例六、同一个类型实现多个接口七、多个类型实现同一个接口八、类型中的嵌套去实现接口九、接口嵌套十、空接口1.空接口的定义2.......
  • Golang(Go语言)字符串转时间格式封装以及填坑
    先看代码:packagemainimport( "fmt" "time")funcmain(){ timeStr:="2021-05-2100:00:00" utcTime,_:=time.Parse(time.DateTime,timeStr) fmt.Println(utcTime)fmt.Println(utcTime.Local())}执行结果:从这里可以看出,字符串转换为时......
  • 应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控
    作者:古琦在现代软件架构中,微服务已成为构建可扩展和灵活应用程序的流行方式。每个微服务负责应用程序的一部分功能,它们共同工作以提供完整的服务。由于微服务架构的分散特性,监控变得至关重要,有效的微服务监控是确保高可用性、可靠性和服务质量的关键组成部分,它支撑了整个系统的健......
  • golang标准库之 fmt
    目录fmt库1.获取输入(1)fmt.Scan(常用)(2)fmt.Scanln(常用)(3)fmt.Scanf2.print、println、printf输出3.Sprint(了解即可)4.Errorf(了解即可)5.格式化占位符(1)通用占位符(2)布尔型占位符(3)整型占位符(4)浮点数与复数占位符(5)字符串和[]byte占位符(6)指针占位符(7)宽度标识符(8)其他fmt库fmt包实现了......
  • golang标准库之 flag、strconv
    目录一、flag库1.flag的简单替代2.flag的参数类型3.flag参数的定义(1)flag.Type()(2)flag.TypeVar()4.flag解析命令行参数5.flag其他方法二、strconv库1.string转换为int类型2.int转换为string类型3.Parse系列函数(1)ParseBool()(2)ParseInt()(3)ParseUnit()(4)ParseFloat()(5)示例4.Fo......
  • golang标准库之 time
    目录time库1.时间类型2.时间戳(1)时间格式转化为时间戳(2)时间戳转换为时间格式3.时间间隔类型4.时间的操作(1)时间格式化(2)解析字符串类型的时间(3)时间加时间间隔(4)两个时间之差(5)时间是否相同(6)判断时间前后(7)定时器time库time库是Go语言内置的库,用来定义和操作时间、日期time.Sl......
  • golang进阶之结构体
    目录一、结构体(Go的面向对象)1.结构体的含义2.type关键字(1)自定义新类型(2)类型的别名(3)自定义类型和类型别名的区别二、结构体的定义三、结构体实例化1.基本实例化2.匿名结构体2.指针型结构体3.取结构体的地址实例化4.结构体指针进阶实例四、结构体的初始化1.未初始化的结构......
  • DW_apb_timers介绍 --20240305
    DW_apb_timers是新思设计的基于APB总线的一个IP DW_apb_timers框图如下:DW_apb_timers特性:1、多达8个可编程定时器;2、定时器宽度可设:8至32位;3、支持两种运行模式:freerunning和user-mode;4、支持定时器的独立计时;5、每个中断可配置极性:低电平(下降沿),高电平(上升沿);6、单个或......