Go 检查time.now是否介于一天中的两次之间

Go 检查time.now是否介于一天中的两次之间,go,Go,我有一个时间对象,它将通过以下方式动态生成: timeNow := time.Now() 我需要检查现在的时间是否在给定的开始和结束时间内 我将有两个字符串,如下所示: startTime := "8:00 AM" endTime := "10:00 PM" 然后,我将以某种方式将这些字符串转换为时间对象,并使用内置的.before()和.after()函数检查时间 问题是,我不确定如何使用todays date(from time.now)创建时间对象,但从给定的时间,即“8:00am”这

我有一个时间对象,它将通过以下方式动态生成:

timeNow := time.Now()
我需要检查现在的时间是否在给定的开始和结束时间内

我将有两个字符串,如下所示:

startTime := "8:00 AM"
endTime := "10:00 PM"
然后,我将以某种方式将这些字符串转换为时间对象,并使用内置的.before()和.after()函数检查时间

问题是,我不确定如何使用todays date(from time.now)创建时间对象,但从给定的时间,即“8:00am”这样的字符串,这怎么可能?感谢@Volker(在评论中)所建议的,如果您可以将小时作为一个整数,并将其与
timeNow.hour()进行比较,那么这是一个很好的方法。如果必须处理字符串(例如,来自配置文件),则可以执行以下操作()


注意:time.Now()返回当前本地时间(即机器配置为使用的任何时区的时间)。这一点很重要,因为如果运行应用程序的计算机未配置为在正确的时区中运行,则结果将与您预期的不一样。

timeNow.Hour()与8和22进行比较。
。不处理字符串。分析所有字符串时间戳。。。转换为unix时间戳整数。比较一下。
startTime := "8:00 AM"
endTime := "10:00 PM"
now := time.Now()

// Parse the start/end times
sTimeOnly, err := time.Parse("3:04 PM", startTime)
if err != nil {
    panic(err)
}
eTimeOnly, err := time.Parse("3:04 PM", endTime)
if err != nil {
    panic(err)
}

// Add current date to the times
s := time.Date(now.Year(), now.Month(), now.Day(), sTimeOnly.Hour(), sTimeOnly.Minute(), sTimeOnly.Second(), sTimeOnly.Nanosecond(), now.Location())
e := time.Date(now.Year(), now.Month(), now.Day(), eTimeOnly.Hour(), eTimeOnly.Minute(), eTimeOnly.Second(), eTimeOnly.Nanosecond(), now.Location())

if now.Before(s) || now.After(e) {
    fmt.Println("Outside of time range")
} else {
    fmt.Println("Within time range")
}