去:time.Parse() 问题
Go: time.Parse() issue
我有以下代码:
timeLocal := "01/July/2015:18:12:25 +0900"
inFormat := "02/January/2006:15:04:05 -0700"
parsed, err := time.Parse(inFormat, timeLocal)
if err != nil {
log.Fatal("Time format was not recognized!")
}
现在,解析工作正常。但是当我 运行:
fmt.Println(timeLocal)
fmt.Println(inFormat)
fmt.Println(parsed)
输出为:
01/July/2015:18:12:25 +0900
02/January/2006:15:04:05 -0700
2015-07-01 18:12:25 +0900 +0900
第二个+0900
应该在吗?我在做什么蠢事?抱歉,今天真的是漫长的一天,我没有看到我错过了什么。
哦,整个文件在这里:
package main
import (
"fmt"
"time"
"log"
)
func main() {
timeLocal := "01/July/2015:18:12:25 +0900"
inFormat := "02/January/2006:15:04:05 -0700"
parsed, err := time.Parse(inFormat, timeLocal)
if err != nil {
log.Fatal("Time format was not recognized!")
}
fmt.Println(timeLocal)
fmt.Println(inFormat)
fmt.Println(parsed)
}
Time.String 使用的默认格式是这样的:
2006-01-02 15:04:05.999999999 -0700 MST
注意 "MST" 部分。由于您没有提供区域名称,格式只是 "names" 与偏移量相同,即“+0900”。如果将其更改为“+0000”,您会发现这确实是一个时区名称:
2015-07-01 18:12:25 +0000 UTC
如果您不想这样,只需使用单独的打印格式即可:
myFmt := "2006-01-02 15:04:05.999999999 -0700"
fmt.Println(parsed.Format(myFmt))
如果您查看 time.Time
的文档,您将看到默认输出格式是什么:
String returns the time formatted using the format string:
"2006-01-02 15:04:05.999999999 -0700 MST"
现在你应该看到第二个 +0900
在那里做什么了——这是一个位置(时区)名称。由于您的输入格式没有名称,它只会重复一个偏移量。
您可以通过更改输入格式来提供名称以解析位置名称。或者,如果不需要,您可以提供不打印名称的输出格式。
你修改的例子:
package main
import (
"fmt"
"time"
"log"
)
func main() {
timeLocal := "01/July/2015:18:12:25 +0900 XYZ"
inFormat := "02/January/2006:15:04:05 -0700 MST"
parsed, err := time.Parse(inFormat, timeLocal)
if err != nil {
log.Fatal("Time format was not recognized!")
}
fmt.Println(timeLocal)
fmt.Println(inFormat)
fmt.Println(parsed) // 2015-07-01 18:12:25 +0900 XYZ
fmt.Println(parsed.Format("02/January/2006:15:04:05 -0700"))
}
我有以下代码:
timeLocal := "01/July/2015:18:12:25 +0900"
inFormat := "02/January/2006:15:04:05 -0700"
parsed, err := time.Parse(inFormat, timeLocal)
if err != nil {
log.Fatal("Time format was not recognized!")
}
现在,解析工作正常。但是当我 运行:
fmt.Println(timeLocal)
fmt.Println(inFormat)
fmt.Println(parsed)
输出为:
01/July/2015:18:12:25 +0900
02/January/2006:15:04:05 -0700
2015-07-01 18:12:25 +0900 +0900
第二个+0900
应该在吗?我在做什么蠢事?抱歉,今天真的是漫长的一天,我没有看到我错过了什么。
哦,整个文件在这里:
package main
import (
"fmt"
"time"
"log"
)
func main() {
timeLocal := "01/July/2015:18:12:25 +0900"
inFormat := "02/January/2006:15:04:05 -0700"
parsed, err := time.Parse(inFormat, timeLocal)
if err != nil {
log.Fatal("Time format was not recognized!")
}
fmt.Println(timeLocal)
fmt.Println(inFormat)
fmt.Println(parsed)
}
Time.String 使用的默认格式是这样的:
2006-01-02 15:04:05.999999999 -0700 MST
注意 "MST" 部分。由于您没有提供区域名称,格式只是 "names" 与偏移量相同,即“+0900”。如果将其更改为“+0000”,您会发现这确实是一个时区名称:
2015-07-01 18:12:25 +0000 UTC
如果您不想这样,只需使用单独的打印格式即可:
myFmt := "2006-01-02 15:04:05.999999999 -0700"
fmt.Println(parsed.Format(myFmt))
如果您查看 time.Time
的文档,您将看到默认输出格式是什么:
String returns the time formatted using the format string:
"2006-01-02 15:04:05.999999999 -0700 MST"
现在你应该看到第二个 +0900
在那里做什么了——这是一个位置(时区)名称。由于您的输入格式没有名称,它只会重复一个偏移量。
您可以通过更改输入格式来提供名称以解析位置名称。或者,如果不需要,您可以提供不打印名称的输出格式。
你修改的例子:
package main
import (
"fmt"
"time"
"log"
)
func main() {
timeLocal := "01/July/2015:18:12:25 +0900 XYZ"
inFormat := "02/January/2006:15:04:05 -0700 MST"
parsed, err := time.Parse(inFormat, timeLocal)
if err != nil {
log.Fatal("Time format was not recognized!")
}
fmt.Println(timeLocal)
fmt.Println(inFormat)
fmt.Println(parsed) // 2015-07-01 18:12:25 +0900 XYZ
fmt.Println(parsed.Format("02/January/2006:15:04:05 -0700"))
}