2016-02-19 3 views
1

У меня есть следующий код в программе, и цель состоит в том, чтобы убедиться, что элемент доступен в течение таймфрейма. По какой-то причине это происходит как ложное. Я зарегистрировал начало, конец и время. Даты начала и окончания поступают через запрос 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()) 
} 

ответ

1

Если там действительно нет часового пояса, а затем использовать UTC, то Coordinated Universal Time.

now := time.Now().UTC() 

Цель состоит в том, чтобы получить все, чтобы время UTC. Возможно, поскольку время БД на самом деле является MST,

// database time zone is Mountain Time 
dbt, err := time.LoadLocation("America/Denver") 
if err != nil { 
    fmt.Println(err) 
    return 
} 

now := time.Now().UTC() 
start := item.Start_date.In(dbt).UTC() 
end := item.End_date.In(dbt).UTC() 
+0

Хмм. Похоже, даты начала/окончания хранятся в БД без часовой пояс, а date.now не принимает никакого временного диапазона = UTC, который сравнивает time.Now(), который является MST. Если я изменю time.Now to time.Now(). MST(), это несколько часов от того, что такое БД. Может быть, лучше сравнить даты, часы и секунды и игнорировать часовой пояс? –

+0

@NathanHyland: Определенное время должно иметь место. Если вы не знаете местоположение, если вы предпочитаете UTC, вы можете это сделать. – JimB

+0

Есть ли способ сказать, что времена, вытащенные из БД, являются MST? Или мне нужно изменить тип DB, чтобы иметь дату с часовым поясом? Чтобы уточнить, не изменяйте времена DB в MST (компенсируя их в течение нескольких часов от времени UTC, что Go думает, что это так), но измените его непосредственно на MST, не влияя на время. –

Смежные вопросы