解析时间的代码示例

本节将介绍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

results matching ""

    No results matching ""