有時候需要時間和時間戳之間進行轉換,以及獲取當前時間和時間戳,
雖然功能很小,但是也不想每次去網頁上搜一搜這么麻煩,因此寫了一個小工具,
原始碼鑒賞:
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 = https://www.cnblogs.com/janbar/archive/2021/04/17/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
把這個小工具記錄一下,后面需要用的時候可以方便點,提高效率,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/277283.html
標籤:其他
