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值,它被转换为今天,作为我用来检查用户生日的这个片段。

前言:这个问题是在11月30日提出的,这就是为什么月份和日期部分看起来像今天。


零值被正确解析;第0个月";。第一个月是1月,其数值为1。同样,没有一个月的第0天,每个月的第一天是1

time.Date文件:

月、日、小时、分钟、秒和nsec值可能超出其正常范围,并将在转换过程中进行归一化。例如,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 UTC
0000-01-01 00:00:00 +0000 UTC
-0001-11-30 00:00:00 +0000 UTC

因此结果变成";今天";今天是11月30日,纯属偶然。如果明天运行代码,则月日部分将不再是今天,而是昨天。

相关内容

最新更新