猿问

Y=0、M=0、D=0 的日期解析为 11 月 30 日

我有以下程序来确定来自第三方的日期,在这种情况下,有时日期不正确,我想使比较失败,但不知何故,日期总是被解析到今天,这会返回一个积极的响应。


import (

    "fmt"

    "time"

)


func main() {

    bday := time.Date(0, time.Month(0), 0, 0, 0, 0, 0, time.UTC)

    fmt.Print(bday)

}

main() 的打印结果是:-0001-11-30 00:00:00 +0000 UTC


我关心的是转换为今天的 DD 和 MM 值,因为我用这个片段来检查用户的生日。


蝴蝶不菲
浏览 141回答 1
1回答

慕婉清6462132

前言:这个问题是在 11 月 30 日提出的,所以月份和日期部分看起来像今天。零值被正确解析,但没有“月 0”。第一个月是具有数值的一月1。同理,一个月没有第 0 天,每个月的第一天都是1.time.Date文件表明:月、日、小时、分钟、秒和纳秒值可能超出其通常范围,并且将在转换过程中进行标准化。例如,10 月 32 日转换为 11 月 1 日。因此,如果您传递0月份和日期,则将其解释为传递1给月份和日期,并添加-1到每个月份和日期。看这个例子:bday := time.Date(0, time.Month(0), 0, 0, 0, 0, 0, time.UTC)fmt.Println(bday)bday2 := time.Date(0, time.Month(1), 1, 0, 0, 0, 0, time.UTC)fmt.Println(bday2)bday2 = bday2.AddDate(0, -1, -1)fmt.Println(bday2)哪些输出(在Go Playground上尝试):-0001-11-30 00:00:00 +0000 UTC0000-01-01 00:00:00 +0000 UTC-0001-11-30 00:00:00 +0000 UTC所以结果变成“今天”纯属偶然,今天是 11 月 30 日。如果你明天运行代码,月日部分将不再是今天,而是昨天。
随时随地看视频慕课网APP

相关分类

Go
我要回答