这是来自Apache日志的示例日期:
[07/Mar/2004:16:47:46 -0800]
我已经成功地将其解析为year(int),month(time.Month),day(int),hour(int),minute(int),second(int)和timezone(string)。
如何构造time.Time,使其包含-0800时区偏移量?
-0800
这是我到目前为止的内容:
var nativeDate time.Time nativeDate = time.Date(year, time.Month(month), day, hour, minute, second, 0, ????)
我应该用什么代替?????time.Local或time.UTC在这里不合适。
????
time.Local
time.UTC
您可以使用time.FixedZone()构造time.Location具有固定偏移量的。
time.FixedZone()
time.Location
例:
loc := time.FixedZone("myzone", -8*3600) nativeDate := time.Date(2019, 2, 6, 0, 0, 0, 0, loc) fmt.Println(nativeDate)
输出(在Go Playground上尝试):
2019-02-06 00:00:00 -0800 myzone
如果区域偏移量为字符串,则可以使用time.Parse()它来解析。使用仅包含参考区域偏移量的布局字符串:
time.Parse()
t, err := time.Parse("-0700", "-0800") fmt.Println(t, err)
0000-01-01 00:00:00 -0800 -0800 <nil>
如您所见,结果time.Time的区域偏移为-0800小时。
time.Time
因此我们的原始示例也可以写成:
t, err := time.Parse("-0700", "-0800") if err != nil { panic(err) } nativeDate := time.Date(2019, 2, 6, 0, 0, 0, 0, t.Location()) fmt.Println(nativeDate)
2019-02-06 00:00:00 -0800 -0800