解析时间字符串类型返回时间类型错误

时间:2014-04-22 16:02:07

标签: go

package main

import "fmt"
import "time"

func main() {
    source := "2014-04-22 23:41:12.518845115 +0800 CST"
    Form := "2014-04-22 23:41:12.518845115 +0800 CST"
    t, err := time.Parse(Form, source)

    if err == nil {
        fmt.Println(t.String())
    } else {
        fmt.Println(err)
    }
}

错误:parsing time "2014-04-22 23:41:12 +0800 CST": month out of range

我通过source得到time.Now().String(),但我无法将其转换回来。这段代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

来自文档:

  

Parse解析格式化的字符串并返回它的时间值   代表。 布局通过显示引用的方式来定义格式   时间,

     

Mon 1月2日15:04:05 -0700 MST 2006将被解释为

     

<强>值;它作为输入格式的一个例子。相同   然后将对输入字符串进行解释。预定义   布局ANSIC,UnixDate,RFC3339和其他描述标准和   方便的参考时间表示。欲获得更多信息   关于参考时间的格式和定义,请参阅   ANSIC的文档以及由此定义的其他常量   封装

(Bolding mine)。

所以你想要的是

Form := "2006-01-02 15:04:05.000000000 -0700 MST"

该输入字符串格式中该日期中列出的日期。我在操场上写这篇文章时需要注意的一点是,它看起来像05.000000000部分(秒和秒的几分之一)你需要格式字符串来包含完全与要解析的字符串一样多的小数点。

这是一个游乐场版本,显示它有效:http://play.golang.org/p/dRniJbqgl7