首页 > 解决方案 > 在 Go 中按 time.Parse(layout, value) 获取“小时超出范围”

问题描述

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

重复/类似于:时间超出范围的时间。在 golang 中解析

标签: gotime

解决方案


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

对于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"

推荐阅读