datetime - 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
。同理,一个月没有第 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 日。如果你明天运行代码,月日部分将不再是今天,而是昨天。
推荐阅读
- asp.net-core - @Html.ActionLink 链接的 id 不起作用
- c# - 错误类 (FluentValidation) 安装失败
- django - 为什么从管理页面的多选中删除选定的值?
- heroku - 更改 Heroku 服务器
- r - 汇总不同聚合级别的数据 - R 和 tidyverse
- python - 使用 scipy.optimize 的 Python 约束非线性优化无法找到最佳解决方案
- azure - 如何在 Visual Studio Code 上本地运行/调试 Azure 云服务?
- react-native - 有没有办法判断何时看到反应组件?
- python - 在 Linux 中使用 Python 而不是命令行导出环境变量
- c# - MySQL IN 子句:当我多次使用相同的值时,如何获得多行?