date之如何在Go中以自定义日期格式获取以小时为单位的时差

dflying 阅读:79 2025-06-02 22:19:02 评论:0

我需要比较这种格式日期帮助的帮助,我想按小时打印比较延迟

createdAt := msg.Header.Get("Date") // string: Sun, 03 May 2020 16:37:40 +0000 (UTC) 
 
t, err := time.Parse("i don't have this", createdAt) 
 
if err != nil { 
    fmt.Println(err) 
} 
 
// some code here idk - comparison createdAt with date/time now 
 
fmt.Printf("Lifespan is %+v", diff) 

输出:
Lifespan is 3h 

请您参考如下方法:

net/http 软件包具有一个帮助程序功能,用于从 header 解析时间,并尝试所有与HTTP兼容的格式: http.ParseTime() 。因此,您绝对应该尝试一下。

t, err := http.ParseTime(createdAt) 
if err != nil { 
    // Handle error 
} 
 
if t.Before(time.Now()) { 
    fmt.Println("It's in the past") 
} else { 
    fmt.Println("It's in the future") 
} 

但是有一个问题:您的时间似乎不是采用有效的HTTP/1.1时间格式,而是由以下布局描述:
"Mon, 02 Jan 2006 15:04:05 -0700 (MST)" 

因此,您可以将其解析为:
t, err := time.Parse("Mon, 02 Jan 2006 15:04:05 -0700 (MST)", createdAt) 
if err != nil { 
    panic(err) // Handle error 
} 
 
delta := time.Since(t) 
fmt.Println("Time since createdAt:", delta) 
if delta < 0 { 
    fmt.Println("It's in the past") 
} else { 
    fmt.Println("It's in the future") 
} 

它输出(在 Go Playground上尝试):
Time since createdAt: -91841h37m40s 
It's in the past 


标签:日期
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号