【问题标题】:Comparing two dates in Go using string types使用字符串类型比较 Go 中的两个日期
【发布时间】:2021-11-10 18:44:48
【问题描述】:

最近,我一直在尝试找到一种方法来了解给定日期是否大于或等于今天。 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

所以,我尝试了一些测试日期,结果总是正确的。但是,我想知道这是否是进行日期比较的好方法,还是可能导致任何时候的错误响应?

提前谢谢你。

【问题讨论】:

    标签: date go comparison date-comparison


    【解决方案1】:

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

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

    【讨论】:

    • 清晰、简洁、实用。非常感谢!
    【解决方案2】:

    我认为使用 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")
    }
    

    【讨论】:

    • 这也是个好主意!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 2019-07-25
    • 2013-06-24
    相关资源
    最近更新 更多