【问题标题】:GoLang parsing time.Now() sans timezone?GoLang 解析 time.Now() 没有时区?
【发布时间】:2016-06-01 08:40:26
【问题描述】:

我在程序中有以下代码,目标是确保在某个时间范围内可以访问项目。出于某种原因,这是错误的。我已经记录了开始、结束和现在的时间。开始/结束日期是通过 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())
}

【问题讨论】:

    标签: javascript time go timezone


    【解决方案1】:

    如果确实没有时区,则使用 UTC,Coordinated Universal Time

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

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

    【讨论】:

    • 嗯。看起来开始/结束日期是从没有时区的数据库中存储的,并且 date.now 假定没有 timezone = UTC,它比较了 time.Now() 即 MST。如果我将 time.Now 更改为 time.Now().MST(),那么它与 DB 的状态相差几个小时。也许最好比较日期、小时和秒并忽略时区?
    • @NathanHyland:一个特定的时间必须有一个位置。如果您不知道位置,假设 UTC 是最好的。
    • 有什么方法可以告诉 Go 从数据库中提取的时间是 MST,然后呢?或者我是否需要更改数据库类型以具有带时区的日期?澄清一下,不要将 DB 时间更改为 MST(将它们从 Go 认为的 UTC 时间偏移几个小时),而是直接将其更改为 MST,而不影响时间。
    • @NathanHyland:请参阅我在示例中使用time In 方法将数据库日期强制为山区时间。如果您使用我的示例规范化为 UTC,会发生什么?
    • 如果我规范化为 .UTC(),它会将我的本地时间设置回多个小时。在标准化之前,它将 10:30 UTC(数据库)与 10:30 MST(Go)进行比较。如果我说 time.Now().UTC(),它会更改为 UTC 下午 5:30。如果我尝试将数据库 UTC 时间转换为 MST,我想 time.in 会做同样的事情 - 它只会抵消它们的时间,看起来像(来自文档)。
    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 2013-07-06
    • 2015-03-23
    • 2012-11-03
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多