公众号merlinsea
- 时间类型在开发中面临的常见问题
- 获取当前时间
- 字符串转时间
- 时间类型之间的比较
- 对时间类型进行格式化输出
- 秒级时间戳/纳秒级时间戳转时间(时间戳是一个整数)
- 对时间类型进行增减[自增1天,自增1个月等等]
// 当前计算机时间是 2022年11月15日 17:18 func main() { // 返回当前时间,注意此时返回的是 time.Time 类型 now := time.Now() fmt.Println(now) // 2022-11-15 17:14:13.207215 +0800 CST m=+0.000094241 // 当前时间戳,秒级 fmt.Println(now.Unix()) //1668503653 // 当前纳秒级时间戳 fmt.Println(now.UnixNano()) //1668503653207215000 // 当前纳秒级时间戳小数部分 fmt.Println(now.Nanosecond()) //207215000 // 返回日期,返回的是数字类型 year, month, day := now.Date() fmt.Printf("year:%d, month:%d, day:%d\n", year, month, day) //year:2022, month:11, day:15 // 年 fmt.Println(now.Year()) // 2022 // 月,返回的是英文月 fmt.Println(now.Month()) //November // 日 fmt.Println(now.Day()) // 15 // 时分秒 hour, minute, second := now.Clock() fmt.Printf("hour:%d, minute:%d, second:%d\n", hour, minute, second) //hour:17, minute:18, second:35 // 时 fmt.Println(now.Hour()) //17 // 分 fmt.Println(now.Minute()) //18 // 秒 fmt.Println(now.Second()) //35 // 返回星期 fmt.Println(now.Weekday()) //Tuesday //返回一年中对应的第几天 fmt.Println(now.YearDay()) //319 , 2022年11月15日是2022年的第319天,第几天从1开始 //返回时区 fmt.Println(now.Location()) //Local //格式化时间 "2006代表年,01代表月,02代表日,15代表时,03代表月,04代表日" fmt.Println(now.Format("2006-01-02 15:03:04")) //2022-11-15 17:05:22 fmt.Println(now.Format("2006-01-02")) //2022-11-15 fmt.Println(now.Format("15:03:04")) //17:05:22 fmt.Println(now.Format("2006/01/02 15:04")) //2022/11/15 17:22 fmt.Println(now.Format("15:04 2006/01/02")) //17:22 2022/11/15 fmt.Println(now.Format("2006-01")) //2022-11 fmt.Println(now.Format("20060102")) //20221115 // 秒级时间戳转时间类型,tm是time.Time类型 tm := time.Unix(1668672132, 0) fmt.Printf("tm的类型是%T,tm的值是%v\n", tm, tm) //tm的类型是time.Time,tm的值是2022-11-17 16:02:12 +0800 CST // 将时间tm 按照 [年-月]的格式进行格式化 tmStr := tm.Format("2006-01") fmt.Println(tmStr) // 2022-11 // 将时间tm 按照 [年月日]的格式进行格式化 tmStr = tm.Format("20060102") fmt.Println(tmStr) //20221117 // 取下个月1号 date := tm.AddDate(0, 1, -tm.Day()+1) fmt.Printf("date的类型是%T,date的值是%v\n", date, date) //date的类型是time.Time,date的值是2022-12-01 16:02:12 +0800 CST // string转time类型,要求str的格式必须和layout模版一摸一样 str := "202201" // 解析出来的parse是年-月-日 时:分:秒类型的time类型 parse, err := time.Parse("200601", str) if err != nil { fmt.Println("转换失败") } else { fmt.Printf("parse类型是%T,parse值是%v\n", parse, parse) //parse类型是time.Time,parse值是2022-01-01 00:00:00 +0000 UTC } // 时间类型新增1个月然后按照[年月]格式进行格式化 format := parse.AddDate(0, 1, 0).Format("200601") fmt.Printf("format类型是%T,format值是%v\n", format, format) //format类型是string,format值是202202 // time.Time时间类型的比较 today := time.Now() yesterday := today.AddDate(0, 0, -1) tomorrow := today.AddDate(0, 0, 1) //今天 2022-12-01 20:11:08.6365 +0800 CST m=+0.000508634 是 昨天 2022-11-30 20:11:08.6365 +0800 CST的将来 //今天 2022-12-01 20:11:08.6365 +0800 CST m=+0.000508634 是 明天 2022-12-02 20:11:08.6365 +0800 CST的过去 if today.After(yesterday) { fmt.Printf(" 今天 %v 是 昨天 %v的将来\n", today, yesterday) } else { fmt.Println("exception") } if today.Before(tomorrow) { fmt.Printf(" 今天 %v 是 明天 %v的过去\n", today, tomorrow) } else { fmt.Println("exception") } }