Golang中处理11点前的时间操作技巧

Golang中处理11点前的时间操作技巧 我正在寻找最简单的方法来检查当前时间是否在凌晨4点至上午11点之间。我找到了很多处理固定日期的示例,但没有找到只检查时间而不考虑日期部分的方法。目前我使用以下代码,但这种方法无法检查11:15这样的时间:

t := time.Now()
	if t.Hour() < 11 {
3 回复

你能这样做吗?https://play.golang.org/p/T1cQJSQjAmr

修改了示例,看起来你需要进行一些额外的检查来引发适当的行为。

更多关于Golang中处理11点前的时间操作技巧的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


您是指11:15这个时间可以吗?您可以这样检查:

t.Hour() >= 4 && t.Hour() < 12

或者如果您想检查从4:00:00到11:00:00的时间范围,可以使用这个函数:

func betweenHours(t time.Time, fromHour, toHour int) bool {
	hour, min, sec := t.Clock()
	return hour >= fromHour && (hour < toHour ||
		hour == toHour && min == 0 && sec == 0)
}

这个函数只会在11:00:00.000…00001到11:00:00.999…9999这个时间段内判断失败,但也许这并不重要。

以下是一个更准确的方法来检查当前时间是否在凌晨4点至上午11点之间,包括处理分钟部分:

package main

import (
    "fmt"
    "time"
)

func isBetween4And11AM(t time.Time) bool {
    currentTime := t.Hour()*60 + t.Minute()
    startTime := 4*60  // 4:00 AM
    endTime := 11*60   // 11:00 AM
    
    return currentTime >= startTime && currentTime < endTime
}

func main() {
    // 测试示例
    testTimes := []time.Time{
        time.Date(2023, 1, 1, 3, 59, 0, 0, time.Local),  // 3:59 AM
        time.Date(2023, 1, 1, 4, 0, 0, 0, time.Local),   // 4:00 AM
        time.Date(2023, 1, 1, 8, 30, 0, 0, time.Local),  // 8:30 AM
        time.Date(2023, 1, 1, 10, 59, 0, 0, time.Local), // 10:59 AM
        time.Date(2023, 1, 1, 11, 0, 0, 0, time.Local),  // 11:00 AM
        time.Date(2023, 1, 1, 11, 15, 0, 0, time.Local), // 11:15 AM
    }
    
    for _, testTime := range testTimes {
        result := isBetween4And11AM(testTime)
        fmt.Printf("%s -> %t\n", testTime.Format("15:04"), result)
    }
    
    // 检查当前时间
    now := time.Now()
    currentResult := isBetween4And11AM(now)
    fmt.Printf("\n当前时间 %s 是否在4:00-11:00之间: %t\n", 
        now.Format("15:04"), currentResult)
}

另一种更简洁的方法是使用time包的时间比较功能:

func isBetween4And11AM(t time.Time) bool {
    today := t.Format("2006-01-02")
    
    start, _ := time.Parse("2006-01-02 15:04", today+" 04:00")
    end, _ := time.Parse("2006-01-02 15:04", today+" 11:00")
    
    return (t.Equal(start) || t.After(start)) && t.Before(end)
}

或者使用更直接的时间计算:

func isBetween4And11AM(t time.Time) bool {
    hour := t.Hour()
    minute := t.Minute()
    
    // 4:00 AM 到 11:00 AM 之间
    if hour > 4 && hour < 11 {
        return true
    }
    if hour == 4 && minute >= 0 {
        return true
    }
    if hour == 11 && minute == 0 {
        return false  // 11:00 不算在内
    }
    return false
}

第一种方法将时间转换为分钟数进行比较,是最可靠的方法,能够正确处理所有边界情况,包括11:15这样的时间。

回到顶部