AS @Volker предлагает (в комментариях), если вы можете получить час как целое число и сравнить его с timeNow.Hour()
, тогда это хороший подход. Если вам приходится иметь дело со строкой (например, из файла конфигурации), то вы можете сделать что-то вроде этого ( детская площадка )
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")
}
Примечание: time.Now () возвращает текущий местное время (то есть время в любом часовом поясе, на котором настроена ваша машина). Это важно, потому что, если машина, на которой работает приложение, не настроена для работы в правильном часовом поясе, тогда результаты будут не такими, как вы ожидаете.