package main
import (
"fmt"
"time"
)
var timeLayoutStr = "2006-01-02 15:04:05" //go中的时间格式化必须是这个时间
//var timeLayoutStr = 2006/01/02 03:04:05 //合法, 格式可以改变
//var timeLayoutStr = 2019/01/02 15:04:05 //不合法, 时间必须是2016年1月2号这个时间
func testFormat() {
/*
格式:
月份 1,01,Jan,January
日 2,02,_2
时 3,03,15,PM,pm,AM,am
分 4,04
秒 5,05
年 06,2006
时区 -07,-0700,Z0700,Z07:00,-07:00,MST
周几 Mon,Monday
*/
fmt.Println(time.Now().Format("现在是1月份"))
fmt.Println(time.Now().Format("现在是01月_2日"))
fmt.Println(time.Now().Format("现在是Jan月份"))
fmt.Println(time.Now().Format("现在是January月份"))
fmt.Println("现在是:", time.Now().Format(timeLayoutStr))
}
func testFormat1() {
t := time.Now() //当前时间
t.Unix() //时间戳
ts := t.Format(timeLayoutStr) //time转string
fmt.Printf("time转string:%T,%v\n", ts, ts)
st, _ := time.Parse(timeLayoutStr, ts) //string转time
fmt.Printf("string转time :%T,%v\n", st, st)
//在go中, 可以格式化一个自定义格式的时间字符串
prefixTStr := "PREFIXA-- 2021-11-05 -TESTB- 18:32:12 --SUFFIXC" //带前自定义格式的时间字符串
preTimeLayoutStr := "PREFIXA-- 2006-01-02 -TESTB- 15:04:05 --SUFFIXC" //解析格式需要和自定义格式的时间字符串一致
prefixTime, err := time.Parse(preTimeLayoutStr, prefixTStr)
if err != nil {
fmt.Println("err:", err)
} else {
fmt.Println("prefixTime:", prefixTime.Format(timeLayoutStr))
}
//时间加减 time.ParseDuration()
// such as "300ms", "-1.5h" or "2h45m".
// Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
at, err := time.ParseDuration("-24h30m") //24小时30分钟前的时间, 正数就是之后的时间
if err != nil {
fmt.Println("err:", err)
} else {
fmt.Println("时间加减 -24小时30分钟:", (t.Add(at)).Format(timeLayoutStr))
}
//两个时间差
sub := t.Sub(prefixTime)
fmt.Println("两个时间差:", sub.Hours(), "小时") //sub.Seconds() 秒, sub.Minutes()分钟, sub.Hours()小时
}
func main() {
testFormat()
testFormat1()
}