登录
首页 >  Golang >  Go问答

如何进行日期/时间比较

来源:Golang技术栈

时间:2023-03-21 21:06:18 225浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《如何进行日期/时间比较》,这篇文章主要会讲到golang等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

在 Go 中进行日期比较有什么选择吗?我必须根据日期和时间对数据进行排序 - 独立。所以我可能允许一个对象出现在一个日期范围内,只要它也出现在一个时间范围内。在这个模型中,我不能简单地选择最早的日期、最年轻的时间/最晚日期、最晚时间和 Unix() 秒来比较它们。我真的很感激任何建议。

最终,我写了一个时间解析字符串比较模块来检查时间是否在一个范围内。然而,这并不顺利。我有一些悬而未决的问题。我会在这里发布它只是为了好玩,但我希望有更好的时间比较方法。

package main

import (
    "strconv"
    "strings"
)

func tryIndex(arr []string, index int, def string) string {
    if index  b and a is the lower limit
            return false
        }
    }
    return false
}

func timeGreaterEqual(a, b int) (bool, bool) {return a > b, a  b}

/*
 * Returns true for two strings formmated "hh:mm:ss".
 * Note: strings can actually be formatted like "h", "hh", "hh:m",
 * "hh:mm", etc. Any missing parts will be added lazily.
 */
func withinTime(timeRange, time string) bool {
    rArr := strings.Split(timeRange, "-")
    if timeCompare(rArr[0], rArr[1], timeLesserEqual) {
        afterStart := timeCompare(rArr[0], time, timeLesserEqual)
        beforeEnd := timeCompare(rArr[1], time, timeGreaterEqual)
        return afterStart && beforeEnd
    }
    // Catch things like `timeRange := "22:00:00-04:59:59"` which will happen
    // with UTC conversions from local time.
    // THIS IS THE BROKEN PART I BELIEVE
    afterStart := timeCompare(rArr[0], time, timeLesserEqual)
    beforeEnd := timeCompare(rArr[1], time, timeGreaterEqual)
    return afterStart || beforeEnd
}

所以 TLDR,我写了一个 withinTimeRange(range, time) 函数,但它不能完全正常工作。(事实上​​,大多数情况下,时间范围跨越几天的情况被破坏了。原始部分有效,我刚刚意识到在从本地转换为 UTC 时需要考虑这一点。)

如果有更好的(最好是内置的)方式,我很想听听!

注意:作为一个例子,我用这个函数在 Javascript 中解决了这个问题:

function withinTime(start, end, time) {
    var s = Date.parse("01/01/2011 "+start);
    var e = Date.parse("01/0"+(end=="24:00:00"?"2":"1")+"/2011 "+(end=="24:00:00"?"00:00:00":end));
    var t = Date.parse("01/01/2011 "+time);
    return s = t;
}

但是我真的很想在服务器端做这个过滤器。

正确答案

使用time包在 Go 中处理时间信息。

可以使用 Before、After 和 Equal 方法比较时间瞬间。Sub 方法减去两个瞬间,产生一个持续时间。Add 方法添加一个时间和一个持续时间,产生一个时间。

播放示例:

package main

import (
    "fmt"
    "time"
)

func inTimeSpan(start, end, check time.Time) bool {
    return check.After(start) && check.Before(end)
}

func main() {
    start, _ := time.Parse(time.RFC822, "01 Jan 15 10:00 UTC")
    end, _ := time.Parse(time.RFC822, "01 Jan 16 10:00 UTC")

    in, _ := time.Parse(time.RFC822, "01 Jan 15 20:00 UTC")
    out, _ := time.Parse(time.RFC822, "01 Jan 17 10:00 UTC")

    if inTimeSpan(start, end, in) {
        fmt.Println(in, "is between", start, "and", end, ".")
    }

    if !inTimeSpan(start, end, out) {
        fmt.Println(out, "is not between", start, "and", end, ".")
    }
}

好了,本文到此结束,带大家了解了《如何进行日期/时间比较》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表