登录
首页 >  Golang >  Go问答

将 RFC3339 格式的时间戳在 Go 中转换为另一种格式

来源:stackoverflow

时间:2024-03-05 12:57:29 171浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《将 RFC3339 格式的时间戳在 Go 中转换为另一种格式》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我有这种格式的时间戳字符串 2020-01-17T14:41:56.393+0530 我希望它们转换成这种格式 2019-01-18T04:32:03Z

该 godoc 上的 time.Parse 方法文档说这些都是有效的 RFC3339 格式,但如何将它们从这种形式转换为 Z 形式?

实际上我想做的是找出这种格式的某个时间戳 2020-01-17T14:41:56.393+0530 是否位于 z 格式 2019-01-18T04:32 的两个时间戳的范围内:03Z


解决方案


时间包将rfc3339定义为:

rfc3339 = "2006-01-02t15:04:05z07:00"

因此 2020-01-17t14:41:56.393+0530 无效(时区中没有冒号)。请参阅 this issue 讨论 go 对此的处理是否与 RFC 一致。

您不需要 - 一旦您转换为 time.time,该软件包就会为您处理时区。例如:

checkTime, err := time.Parse("2006-01-02T15:04:05Z0700", "2020-01-17T14:41:56.393+0530")
if err != nil {
    panic(err)
}
startRange, err := time.Parse(time.RFC3339, "2020-01-18T02:32:03Z")
if err != nil {
    panic(err)
}
endRange, err := time.Parse(time.RFC3339, "2020-01-18T04:32:03Z")
if err != nil {
    panic(err)
}

fmt.Printf("check: %v start: %v end: %v", checkTime, startRange, endRange)
if !startRange.After(checkTime) && !endRange.Before(checkTime) {
    fmt.Println("Check 1 in range")
}

checkTime, err = time.Parse(time.RFC3339, "2020-01-18T09:41:56.393+05:30")
if err != nil {
    panic(err)
}
if !startRange.After(checkTime) && !endRange.Before(checkTime) {
    fmt.Println("Check 2 in range")
}

fmt.Printf("check: %v start: %v end: %v", checkTime.Local(), startRange.Local(), endRange.Local())

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>