第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何比較時間的時鐘部分。時間

如何比較時間的時鐘部分。時間

Go
慕的地8271018 2022-07-11 17:41:43
我有一個starttime.Time "2019-07-02 01:00:00" 我想寫一個函數(shù)來告訴我是否time.Now()在開始時間之前的 x 分鐘范圍內(nèi)(忽略日期,只是時鐘部分01:00:00)例如:案例一x = 30 minutestime.Now() = "2020-11-20 00:45:00" //return True because 00:45:00 is 15 minutes before 01:00:00time.Now() = "2020-11-20 00:20:00" //return False because 00:20:00 is 40 minutes before 01:00:00案例二x = 120 minutestime.Now() = "2020-11-20 23:00:00" //return True because 23:00:00 is 120 minutes/2 hours before 01:00:00 (like 11pm is 2 hours before 1am of next day)time.Now() = "2020-11-20 00:00:00" //return Truetime.Now() = "2020-11-20 00:20:00" //return Truetime.Now() = "2020-11-20 22:30:00" //returns False案例三x=1440 // 24 hoursalways return true我現(xiàn)在只解決了案例一但沒有解決案例二。我查看了 go 的時間包,但沒有找到任何有效解決此問題的方法。有任何想法嗎?now := time.Now()trigger : = start.Sub(time.Minute * x))triggerClock :=  trigger.Sub(trigger.Truncate(24 * time.Hour)) //extract clock portionnowClock := now.Sub(now.Truncate(24*time.Hour)) //extract clock portiondiff := nowClock.Seconds() - triggerClock.Seconds()if diff >= 0 && diff < x {    return true}
查看完整描述

3 回答

?
慕哥9229398

TA貢獻1877條經(jīng)驗 獲得超6個贊

有很多方法可以解決這個問題,選擇正確的方法取決于“開始時間前 x 分鐘”的含義:

  • “只是時鐘部分”我假設(shè)您的意思是當天,或者,如果當前時間在“時鐘部分”之后,明天。

  • 夏令時的開始/結(jié)束可能會導致明顯的答案可能不正確(但您需要指定在這些時間應該發(fā)生什么)。

  • 是否需要考慮時區(qū)?(我暫時不會假設(shè),但值得考慮一下?。?。

我將通過計算目標時間和檢查時間之間的分鐘數(shù)來解決這個問題,如下所示:

func MinutesBefore(target time.Time, check time.Time) int {

    t := time.Date(check.Year(), check.Month(), check.Day(), target.Hour(), target.Minute(), target.Second(), target.Nanosecond(), target.Location())

    if t.Before(check) {

        t = time.Date(check.Year(), check.Month(), check.Day()+1, target.Hour(), target.Minute(), target.Second(), target.Nanosecond(), target.Location())

    }

    return int(t.Sub(check).Minutes())

}

在操場上嘗試一些測試用例。


查看完整回答
反對 回復 2022-07-11
?
拉丁的傳說

TA貢獻1789條經(jīng)驗 獲得超8個贊

截斷差異可能更容易,而不是時間,例如:


package main


import (

    "log"

    "time"

)


const (

    day = time.Hour * 24

)


func within(t1, t2 time.Time, epsilon time.Duration) bool {

    delta := t1.Sub(t2)

    delta = (delta - delta.Truncate(day))


    // Take absolute value of delta.

    if delta < 0 {

        delta = -delta

    }


    // Reduce if the times are closer across midnight.

    if adjusted := day - delta; adjusted < delta {

        delta = adjusted

    }


    return delta <= epsilon

}


func main() {

    start := time.Date(2019, 7, 2, 01, 0, 0, 0, time.UTC)


    for _, tc := range []struct {

        t    time.Time

        e    time.Duration

        want bool

    }{

        {

            t:    time.Date(2020, 11, 20, 0, 45, 0, 0, time.UTC),

            e:    time.Minute * 30,

            want: true,

        },

        {

            t:    time.Date(2020, 11, 20, 0, 20, 0, 0, time.UTC),

            e:    time.Minute * 30,

            want: false,

        },

        {

            t:    time.Date(2020, 11, 20, 23, 0, 0, 0, time.UTC),

            e:    time.Minute * 120,

            want: true,

        },

        {

            t:    time.Date(2020, 11, 20, 0, 0, 0, 0, time.UTC),

            e:    time.Minute * 120,

            want: true,

        },

        {

            t:    time.Date(2020, 11, 20, 0, 20, 0, 0, time.UTC),

            e:    time.Minute * 120,

            want: true,

        },

        {

            t:    time.Date(2020, 11, 20, 22, 30, 0, 0, time.UTC),

            e:    time.Minute * 120,

            want: false,

        },

        {

            t:    time.Date(2020, 11, 20, 13, 0, 0, 0, time.UTC),

            e:    time.Hour * 24,

            want: true,

        },

    } {

        if within(start, tc.t, tc.e) != tc.want {

            log.Fatalf("test failed for %v, %v, %v", start, tc.t, tc.e)

        }

    }

}

您說您想在 24 小時或更長時間內(nèi)返回true,x但請注意,因為您想要案例 2 的第一個示例中給出的行為,結(jié)果證明true將在x12 小時或更長時間內(nèi)返回,因為那是如果您接受 24 小時內(nèi)或跨過 24 小時的最近距離,則為兩次之間的最大距離。


查看完整回答
反對 回復 2022-07-11
?
江戶川亂折騰

TA貢獻1851條經(jīng)驗 獲得超5個贊

您可以使用模板解析日期的時間分數(shù)(時鐘部分)15:04:05


var start time.Time

start, _ = time.Parse("15:04:05", "01:00:00")

我們想要減去start并now檢查結(jié)果是否不大于x


if start.Sub(now).Minutes() <= x.Minutes() {

    return true

}

這將適用于我們的第一個案例,但是當我們中間有一個午夜時它會失敗。解決這個問題,我們可以從中減去一天now


if start.Before(now) {

    now = now.Add(-time.Hour * 24)

}

那么在這里你有它


func rangeOf(x time.Duration, start time.Time, now time.Time) bool {

    if start.Before(now) {

        now = now.Add(-time.Hour * 24)

    }

    if start.Sub(now).Minutes() <= x.Minutes() {

        return true

    }


    return false

}

這是案例二測試


func main() {

    x := 120 * time.Minute

    var now time.Time


    now, _ = time.Parse("15:04:05", "23:00:00")

    fmt.Printf("%t\n", rangeOf(x, start, now))


    now, _ = time.Parse("15:04:05", "00:00:00")

    fmt.Printf("%t\n", rangeOf(x, start, now))


    now, _ = time.Parse("15:04:05", "00:20:00")

    fmt.Printf("%t\n", rangeOf(x, start, now))


    now, _ = time.Parse("15:04:05", "22:30:00")

    fmt.Printf("%t\n", rangeOf(x, start, now))

}

這里的所有測試用例https://play.golang.com/p/Ijs-rlPCIIJ


查看完整回答
反對 回復 2022-07-11
  • 3 回答
  • 0 關(guān)注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號