去time.Parse()得到"月度超出范围"错误

raf*_*ais 8 time go

我是Go的新手,我正在创建一个小的控制台脚本.你可以在这里查看我的代码:

package main

import (
    "bufio"
    "fmt"
    "os"
    "time"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Println("Calculate")
    fmt.Print("Hours and minutes: ")
    start, _, _ := reader.ReadLine()
    begin, err := time.Parse("2016-12-25 00:00:00", "2016-12-25 "+string(start)+":00")
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(begin)
}
Run Code Online (Sandbox Code Playgroud)

我见过一个相关的问题,但我不明白为什么.

这是我在运行代码后得到的错误:

parsing time "2016-12-25 22:40:00": month out of range
0001-01-01 00:00:00 +0000 UTC
Run Code Online (Sandbox Code Playgroud)

关于我做错什么的任何想法?

谢谢

nos*_*bee 14

您使用了错误的参考时间的layout参数time.Parse应该是Jan 2, 2006 at 3:04pm (MST)

将您的begin行更改为以下内容,它将起作用:

begin, err := time.Parse("2006-01-02 15:04:05", "2016-12-25 "+string(start)+":00")

func Parse

  • 这应该有帮助:https://golang.org/src/time/format.go?s=25155:25201#L92 (4认同)
  • 它不像纪元,那个时间点并不像 Unix 纪元那样意味着任何东西,但它只是时间元素(月、日等)的助记符。把它想象成`01/02 03:04:05PM '06 -0700` (1-2-3-4-5-6-7),只要你记住那个单序列,你就可以写出`1` 、`01`、`Jan` 或`January` 而不必像`strftime` 那样记住`%m`、`%b` 或`%B`。 (3认同)
  • 它受到Unix时代https://en.wikipedia.org/wiki/Unix_time的启发。这是Go的版本。Go需要为布局设置一个参考时间,否则每个程序员都将选择任意参考日期。 (2认同)