小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
time
时间与日期转换
func timeDemo() {
now := time.Now() //获取当前时间
fmt.Printf("current time:%v\n", now)
year := now.Year() //年
month := now.Month() //月
day := now.Day() //日
hour := now.Hour() //小时
minute := now.Minute() //分钟
second := now.Second() //秒
fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)
timestamp1 := now.Unix() //时间戳
timestamp2 := now.UnixNano() //纳秒时间戳
fmt.Printf("current timestamp1:%v\n", timestamp1)
fmt.Printf("current timestamp2:%v\n", timestamp2)
timeObj := time.Unix(timestamp1, 0)//时间戳转换成时间对象,再通过类似以上当前时间转换成时间格式
}
时间间隔(单位)
time包中时间间隔的定义:
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
var _time = 10 * time.Second //10秒
例如:time.Duration表示1纳秒,time.Second表示1秒。
时间格式化
golang的常用时间格式化模板并不是常见的:Y-m-d H:i:s,而是2006-01-02 15:04 ,这是24小时制,2006-01-02 03:04 PM,则是12小时制
fmt.Println(now.Format("2006-01-02 15:04:05.000 Mon Jan"))
// 12小时制
fmt.Println(now.Format("2006-01-02 03:04:05.000 PM Mon Jan"))
fmt.Println(now.Format("2006/01/02 15:04"))
fmt.Println(now.Format("15:04 2006/01/02"))
fmt.Println(now.Format("2006/01/02"))
时间操作
golang中的时间,并不是简单的数字加减,time包提供了实践操作的方法:
-
Add:时刻+时间段
func main() { now := time.Now() later := now.Add(time.Hour) // 当前时间加1小时后的时间 beforer := now.Add(-time.Hour) // 当前时间减1小时后的时间 fmt.Println(later) } -
Sub:时刻1 - 时刻2,求两个时间的差值,注意这里并不是(时刻-时间段)的实现,(时刻-时间段)仍然可以用Add(-时间段)来实现
-
Equal:判断时间是否相等,会考虑时区
-
Before:判断是否在某个时刻之前
-
After:判断是否在某个时刻之后
定时器
定时器,本质上是一个channel,golang中使用time.Ticker(duration)来设置定时器
-
一次性定时器(延时)
package main import ( "fmt" "time" ) func main() { /* 用sleep实现定时器 */ fmt.Println(time.Now()) time.Sleep(time.Second) fmt.Println(time.Now()) /* 用timer实现定时器 */ timer := time.NewTimer(time.Second) fmt.Println(<-timer.C) /* 用after实现定时器 */ fmt.Println(<-time.After(time.Second)) } -
周期性定时器
func tickDemo() { ticker := time.Tick(time.Second) //定义一个1秒间隔的定时器 //ticker := time.NewTicker(time.Second) for i := range ticker { fmt.Println(i)//每秒都会执行的任务 } }