解析时间的代码示例
本节将介绍parseTime.go
,这段代码接收一个命令行参数,并将其由string
类型转换成time
类型。该代码分为三部分,仅是为了演示time.Parse()
,可能会因为你的输入格式不正确而报错。
第一部分:
package main
import (
"fmt"
"os"
"path/filepath"
"time"
)
第二部分:
func main() {
var myTime string
if len(os.Args) != 2 {
fmt.Printf("Usage: %s string\n",
filepath.Base(os.Args[0]))
os.Exit(0)
}
myTime = os.Args[1]
最后一部分是展现神奇的代码:
d,err := time.Parse("15:04",myTime)
if err == nil {
fmt.Println("Full",d)
fmt.Println("Time", d.Hour(), d.Minute())
} else {
fmt.Println(err)
}
}
可以看到,为了解析一个包含小时和分钟的字符串,你需要使用常量来构建格式”15:04”。返回值err
能够告诉你我们的解析是否成功。
执行parseTime.go
后我们得到:
$ go run parseTime.go
usage: parseTime string
exit status 1
$ go run parseTime.go 12:10
Full 0000-01-01 12:10:00 +0000 UTC Time 12 10
可以看到Go将整个时间(Full 0000-01-01 12:10:00 +0000 UTC)都打印出来了,这是因为time.Parse()
返回值是时间类型的变量。如果你只关心具体时间而不是日期,你应该只打印你关心的time
变量部分。
如果你没有按照Go规定的时间常量来格式化你的字符串,例如使用22:04
作为第一个参数,你就会得到下面的错误信息:
$ go run parseTime.go
parsing time “12:10” as “22:04” : cannot parse “:10” as “2”
或者,如果你使用了用来处理月份的11
来格式化,可能得到下面的错误信息:
$ go run parseTime.go 12:10
parsing time “12:10”: month out of range