10

Go打印时间

time.Now().String()

作为

2012-12-18 06:09:18.6155554 +0200 FLEST

或者

2009-11-10 23:00:00 +0000 UTC

http://play.golang.org/p/8qwq9U_Ri5

我该如何解析它?

我想 我不在这些国家,我想我可以得到所有类型的时区FLESTFinland Latvian Estonian Standard Time我找不到一种统一的方式或模式来解析它time.Parse

4

3 回答 3

12

尽管time.Parse()接受诸如 之类的格式字符串,但使用time 中定义的常量2006-01-02 15:04:05 -0700 MST之一可能更简单。

const (
    ANSIC       = "Mon Jan _2 15:04:05 2006"
    UnixDate    = "Mon Jan _2 15:04:05 MST 2006"
    RubyDate    = "Mon Jan 02 15:04:05 -0700 2006"
    RFC822      = "02 Jan 06 15:04 MST"
    RFC822Z     = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
    RFC850      = "Monday, 02-Jan-06 15:04:05 MST"
    RFC1123     = "Mon, 02 Jan 2006 15:04:05 MST"
    RFC1123Z    = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
    RFC3339     = "2006-01-02T15:04:05Z07:00"
    RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
    Kitchen     = "3:04PM"
    // Handy time stamps.
    Stamp      = "Jan _2 15:04:05"
    StampMilli = "Jan _2 15:04:05.000"
    StampMicro = "Jan _2 15:04:05.000000"
    StampNano  = "Jan _2 15:04:05.000000000"
)

如果您使用字符串作为存储或编码时间的一种方式(例如使用限制性编码格式),您可能需要考虑使用Unix time。这样,您可以只存储一个int64(或两个,如果您保持纳秒数。

于 2012-12-30T20:37:40.207 回答
10
package main

import (
"fmt"
"time"
)

func main() {
    fmt.Println(time.Now())
    date := "2009-11-10 23:00:00 +0000 UTC"
    t, err := time.Parse("2006-01-02 15:04:05 -0700 MST", date)
        if err != nil {
                fmt.Println("parse error", err.Error())
        }
        fmt.Println(t.Format(time.ANSIC))
}

游乐场:http ://play.golang.org/p/hvqBgtesLd

请参阅http://golang.org/src/pkg/time/format.go?s=15404:15450#L607处的源代码

于 2012-12-30T20:23:19.157 回答
5

time.String 的文档给出了它使用的格式:“2006-01-02 15:04:05.999999999 -0700 MST”。首先是使用相同的格式进行解析。

不过,时区可能对您来说是个问题。如果您必须解析您知道使用 time.String 生成但在其他时区生成的时间,则您必须拥有其他时区的 zoneinfo。请参阅 LoadLocation 下的文档。如果您无法获取 zoneinfo,无法将其安装在您的系统上,或者无法冒在某个新的未知时区失败的风险,那么 time.String 格式不适合您。您将必须获取不同格式的时间戳,或从字符串中删除时区并使用修改后的格式解析修改后的字符串。

于 2013-01-01T14:07:48.567 回答