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这样的时间。

