为了账号安全,请及时绑定邮箱和手机立即绑定

使用字符串类型比较 Go 中的两个日期

使用字符串类型比较 Go 中的两个日期

Go
临摹微笑 2022-10-10 19:54:01
最近,我一直在尝试找到一种方法来了解给定日期是否大于或等于今天。GitHub Copilot 建议我应该使用以下算法: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所以,我尝试了一些测试日期,结果总是正确的。但是,我想知道这是否是进行日期比较的好方法,还是可能随时导致错误的响应?先感谢您。
查看完整描述

2 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

如果您用相同的位数表示两个日期(所有年、月和日期值的宽度相同),并且由于字段的顺序是从高优先级到低优先级(年 -> 月 -> 日),这将始终是正确的(字符串比较也是从左到右进行的)。

注意:当年份达到10000时,这种比较可能会给出错误的结果,因为第一个假设将不成立(所有年份值的宽度相同)。如果要处理 9999 之后的年份,则必须用 5 位数字表示年份,因此2021必须写为02021.


查看完整回答
反对 回复 2022-10-10
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

我认为你会得到更可预测的结果,使用 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")

}


查看完整回答
反对 回复 2022-10-10
  • 2 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信