我有下面的程序来确定来自第三方的日期,有时日期不合适。在这种情况下,我想比较失败,但不知何故,日期总是被解析为今天,这会返回积极的响应。
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日,纯属偶然。如果明天运行代码,则月日部分将不再是今天,而是昨天。