使用字符串类型比较 Go 中的两个日期
Comparing two dates in Go using string types
最近,我一直在尝试寻找一种方法来判断给定日期是否早于或等于今天。 GitHub 副驾驶建议我使用以下算法:
date := "2021-01-01"
today := time.Now().Format("2006-01-02")
switch {
case date == today:
fmt.Println("Equal")
case date < today:
fmt.Println("Less")
case date > today:
fmt.Println("Greater")
}
// Less
所以,我尝试了一些测试日期,结果总是正确的。但是,我想知道这是进行日期比较的好方法还是可能随时导致错误响应?
提前致谢。
如果您用相同的位数表示两个日期(所有年、月和日期值的宽度相同),并且由于字段的优先级顺序从高到低(年 -> 月 -> 日),这将始终是正确的(字符串比较也是从左到右进行的)。
注意:当年份达到 10000
时,此比较可能会给出错误的结果,因为第一个假设将不成立(所有年份值的宽度相同)。如果要处理超过 9999 的年份,则必须用 5 位数字表示年份,因此 2021
必须写成 02021
.
我认为使用 unix 格式的时间你会得到更可预测的结果,但你现在这样做的方式更快。
t, _ := time.Parse("2006-01-02", "2021-01-01")
date := t.Unix()
today := time.Now().Unix()
switch {
case date == today:
fmt.Println("Equal")
case date < today:
fmt.Println("Less")
case date > today:
fmt.Println("Greater")
}
最近,我一直在尝试寻找一种方法来判断给定日期是否早于或等于今天。 GitHub 副驾驶建议我使用以下算法:
date := "2021-01-01"
today := time.Now().Format("2006-01-02")
switch {
case date == today:
fmt.Println("Equal")
case date < today:
fmt.Println("Less")
case date > today:
fmt.Println("Greater")
}
// Less
所以,我尝试了一些测试日期,结果总是正确的。但是,我想知道这是进行日期比较的好方法还是可能随时导致错误响应?
提前致谢。
如果您用相同的位数表示两个日期(所有年、月和日期值的宽度相同),并且由于字段的优先级顺序从高到低(年 -> 月 -> 日),这将始终是正确的(字符串比较也是从左到右进行的)。
注意:当年份达到 10000
时,此比较可能会给出错误的结果,因为第一个假设将不成立(所有年份值的宽度相同)。如果要处理超过 9999 的年份,则必须用 5 位数字表示年份,因此 2021
必须写成 02021
.
我认为使用 unix 格式的时间你会得到更可预测的结果,但你现在这样做的方式更快。
t, _ := time.Parse("2006-01-02", "2021-01-01")
date := t.Unix()
today := time.Now().Unix()
switch {
case date == today:
fmt.Println("Equal")
case date < today:
fmt.Println("Less")
case date > today:
fmt.Println("Greater")
}