我有以下程序来确定来自第三方的日期,在这种情况下,有时日期不正确,我想使比较失败,但不知何故,日期总是被解析到今天,这会返回一个积极的响应。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 值,因为我用这个片段来检查用户的生日。
1 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
前言:这个问题是在 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 UTC
0000-01-01 00:00:00 +0000 UTC
-0001-11-30 00:00:00 +0000 UTC
所以结果变成“今天”纯属偶然,今天是 11 月 30 日。如果你明天运行代码,月日部分将不再是今天,而是昨天。
- 1 回答
- 0 关注
- 140 浏览
添加回答
举报
0/150
提交
取消