解析时间的代码示例

本节将介绍parseTime.go,这段代码接收一个命令行参数,并将其由string类型转换成time类型。该代码分为三部分,仅是为了演示time.Parse(),可能会因为你的输入格式不正确而报错。

第一部分:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. "time"
  7. )

第二部分:

  1. func main() {
  2. var myTime string
  3. if len(os.Args) != 2 {
  4. fmt.Printf("Usage: %s string\n",
  5. filepath.Base(os.Args[0]))
  6. os.Exit(0)
  7. }
  8. myTime = os.Args[1]

最后一部分是展现神奇的代码:

  1. d,err := time.Parse("15:04",myTime)
  2. if err == nil {
  3. fmt.Println("Full",d)
  4. fmt.Println("Time", d.Hour(), d.Minute())
  5. } else {
  6. fmt.Println(err)
  7. }
  8. }

可以看到,为了解析一个包含小时和分钟的字符串,你需要使用常量来构建格式”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