有时候需要时间和时间戳之间进行转换,以及获取当前的时间和时间戳。
虽然功能很小,但是也不想每次去网页上搜一搜这么麻烦,因此写了一个小工具。
源码鉴赏:
package main import ( "fmt" "os" "strconv" "strings" "time" ) func main() { const timeLayout = "\"2006-01-02 15:04:05\" \"20060102150405\"" var sData []string switch len(os.Args) { case 1: t := time.Now() fmt.Println(t.Unix(), t.Format(timeLayout)) return case 2: data := strings.TrimSpace(os.Args[1]) unix, err := strconv.ParseInt(data, 10, 64) if err == nil { // 转换这种: stamp 1618624877 fmt.Println(time.Unix(unix, 0).Format(timeLayout)) return } // 转换这种: stamp "2006-01-02 15:04:05" sData = strings.Fields(data) case 3: // 转换这种: stamp 2006-01-02 15:04:05 sData = []string{os.Args[1], os.Args[2]} default: fmt.Printf("usage:%s or %s [2006-01-02 15:04:05|1136185445]\n", os.Args[0], os.Args[0]) return } var ymd, hms [3]int // 计算年月日 for i, v := range strings.Split(strings.TrimSpace(sData[0]), "-") { n, err := strconv.Atoi(v) if err != nil { panic(err) } ymd[i] = n } if len(sData) == 2 { // 计算时分秒 for i, v := range strings.Split(strings.TrimSpace(sData[1]), ":") { n, err := strconv.Atoi(v) if err != nil { panic(err) } hms[i] = n } } t := time.Date(ymd[0], time.Month(ymd[1]), ymd[2], hms[0], hms[1], hms[2], 0, time.Local) fmt.Println(t.Unix()) }
使用方法:
不带参数,获取当前时间戳和时间 c:\>stamp 1618626612 "2021-04-17 10:30:12" "20210417103012" 带一个参数,包含完整年月日,时分秒,返回时间戳 c:\>stamp "2021-04-17 11:22:41" 1618629761 带两个参数,第一个为年月日,第二个为时分秒 c:\>stamp 2021-04-17 12:22:41 1618633361 只传一串数字会被当做时间戳,返回对应时间 c:\>stamp 1618693361 "2021-04-18 05:02:41" "20210418050241" 直传年月,注意直数字会被当做时间戳转换 c:\>stamp 2021-4 1617120000 只传年月日 c:\>stamp 2021-4-18 1618675200 直传年月日,时 c:\>stamp 2021-4-18 14 1618725600 直传年月日,时分 c:\>stamp 2021-4-18 14:45 1618728300 直传年月日,时分秒 c:\>stamp 2021-4-18 14:45:32 1618728332
把这个小工具记录一下,后面需要用的时候可以方便点,提高效率。