Проверьте, если time.now между двумя разами в день - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть объект времени, который будет динамически генерироваться со следующим:

timeNow := time.Now()

Мне нужно проверить, находится ли время в пределах заданного времени начала и конца.

Таким образом, у меня будет две строки, например, так:

startTime := "8:00 AM"
endTime := "10:00 PM"

Затем я каким-то образом приведу эти строки к объектам времени и проверим по временам встроенные функции .before () и .after ().

Проблема в том, что я не уверен, как я создаю объект времени, используя сегодняшнюю дату (из time.now), но с заданного времени, то есть строки типа «8:00 AM», как это возможно? Спасибо

1 Ответ

0 голосов
/ 10 февраля 2020

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 () возвращает текущий местное время (то есть время в любом часовом поясе, на котором настроена ваша машина). Это важно, потому что, если машина, на которой работает приложение, не настроена для работы в правильном часовом поясе, тогда результаты будут не такими, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...