【问题标题】:Getting "hour out of range" on time.Parse(layout, value) in Go在 Go 中按 time.Parse(layout, value) 获取“小时超出范围”
【发布时间】:2020-05-24 12:37:10
【问题描述】:

我在尝试使用以下代码解析时间戳字符串时收到错误 hour out of range

package main

import (
    "log"
    "time"
)

func main() {
    layout := "2006-01-02 15:04:05 +0530"
    timeStr := "2020-05-23 22:55:51 +0530"
    t, tErr := time.Parse(layout, timeStr)
    log.Printf("Layout: %s", layout)
    log.Printf("Time (string): %s", timeStr)
    log.Printf("Time (time.Time): %s", t.String())
    if tErr != nil {
        log.Printf("Error: %s", tErr.Error())
    }
}

游乐场:https://goplay.space/#SIWJWKduPQg

重复/类似于:Hour out of range on time.parse in golang

【问题讨论】:

    标签: go time


    【解决方案1】:

    您应该使用正确的格式常量进行解析。

    对于https://golang.org/src/time/format.go 中的数字时区偏移

    Numeric time zone offsets format as follows:
        -0700  ±hhmm
        -07:00 ±hh:m
        -07    ±hh
    

    在这里解析±hhmm,你应该使用精确的格式-0700。 所以解析格式用-0700代替+0530

    layout := "2006-01-02 15:04:05 -0700"
    

    【讨论】:

    • 现在它在时间里给了我一个额外的+0530.String() https://goplay.space/#MZyh2hAZrck
    • 一般字符串打印如“2006-01-02 15:04:05 -0700 MST”时区偏移量和时区名称,在您的情况下没有时区名称,因此输出偏移量两次意味着代替时区名称。参考:golang.org/pkg/time/#Time.String
    • 感谢@Eklavya 的所有帮助。
    【解决方案2】:

    布局中的时区偏移量应该是-0700 而不是+0530

    layout := "2006-01-02 15:04:05 -0700"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-22
      • 2019-11-05
      • 2012-07-26
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      相关资源
      最近更新 更多