У меня есть следующий код в программе, и цель состоит в том, чтобы убедиться, что элемент доступен в течение таймфрейма. По какой-то причине это происходит как ложное. Я зарегистрировал начало, конец и время. Даты начала и окончания поступают через запрос JSON без часовой пояс. Time.Now() задает часовой пояс. Это где у меня проблема? Как я могу это исправить?GoLang время разбора. Теперь() sans часовой пояс?
func withinStartAndEnd(item Item) bool {
fmt.Println("Start Date", item.Start_date, "\n")
fmt.Println("End Date", item.End_date, "\n")
fmt.Println("Now:", time.Now(), "\n")
//BUG: For some reason event 0's are still not accessible within the timeframe. The fmt's above are to help look at it. time.Now() is printing MST.. maybe that's it?
/*
Start Date 2016-02-19 09:50:00 +0000 +0000
End Date 2016-02-19 10:00:00 +0000 +0000
Now: 2016-02-19 09:59:48.73003196 -0700 MST
2016/02/19 09:59:48 Item not accessible (#148)
*/
return item.Start_date.Before(time.Now()) && item.End_date.After(time.Now())
}
Хмм. Похоже, даты начала/окончания хранятся в БД без часовой пояс, а date.now не принимает никакого временного диапазона = UTC, который сравнивает time.Now(), который является MST. Если я изменю time.Now to time.Now(). MST(), это несколько часов от того, что такое БД. Может быть, лучше сравнить даты, часы и секунды и игнорировать часовой пояс? –
@NathanHyland: Определенное время должно иметь место. Если вы не знаете местоположение, если вы предпочитаете UTC, вы можете это сделать. – JimB
Есть ли способ сказать, что времена, вытащенные из БД, являются MST? Или мне нужно изменить тип DB, чтобы иметь дату с часовым поясом? Чтобы уточнить, не изменяйте времена DB в MST (компенсируя их в течение нескольких часов от времени UTC, что Go думает, что это так), но измените его непосредственно на MST, не влияя на время. –