Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript GoLang解析time.Now()无时区?_Javascript_Time_Go_Timezone - Fatal编程技术网

Javascript GoLang解析time.Now()无时区?

Javascript GoLang解析time.Now()无时区?,javascript,time,go,timezone,Javascript,Time,Go,Timezone,我在程序中有以下代码,目标是确保在一个时间范围内可以访问某个项目。出于某种原因,这是错误的。我已经记录了开始、结束和现在的时间。开始/结束日期是通过JSON请求输入的,没有时区。time.Now()给出了一个时区。这就是我的问题所在吗?我该怎么修 func withinStartAndEnd(item Item) bool { fmt.Println("Start Date", item.Start_date, "\n") fmt.Println("End Date", item

我在程序中有以下代码,目标是确保在一个时间范围内可以访问某个项目。出于某种原因,这是错误的。我已经记录了开始、结束和现在的时间。开始/结束日期是通过JSON请求输入的,没有时区。time.Now()给出了一个时区。这就是我的问题所在吗?我该怎么修

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())
}

如果确实没有时区,则使用UTC,即


我们的目标是让一切都达到UTC时间。也许,因为DB time实际上是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()

嗯。看起来开始/结束日期是从没有时区的DB存储的,date.now假设没有时区=UTC,它比较time.now()即MST。如果我将time.Now改为time.Now().MST(),它将比数据库少几个小时。也许最好是比较日期、小时和秒,而忽略时区?@Nathanald:特定的时间必须有一个位置。如果您不知道位置,假设UTC是您能做的最好的。那么,我有没有办法告诉Go从DB中提取的时间是MST?或者我是否需要更改DB类型,以具有时区的日期?为了澄清,不要将DB时间更改为MST(将它们与Go认为的UTC时间相隔数小时),而是直接更改为MST,而不影响时间。@Nathanaland:请参阅我在示例中使用的方法中的
,以强制数据库日期为山地时间。如果您使用我的示例将其规范化为UTC,会发生什么情况?如果我将其规范化为.UTC(),则会将本地时间设置回多少小时。在标准化之前,它将10:30 UTC(数据库)与10:30 MST(Go)进行比较。如果我说time.Now().UTC(),它将更改为UTC下午5:30。我想如果我尝试将数据库UTC时间转换为MST,time.in也会做同样的事情——它只会抵消小时数,看起来像(从文档中)。
// 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()