zoukankan      html  css  js  c++  java
  • [go]time包

    go by example: time

    time常用api

    // time包
    now := time.Now() 
    fmt.Printf("current time:%v
    ", now) //2019-12-04 21:37:22.138938 +0800 CST m=+0.000109570
    
    //格式化时间
    year := now.Year()
    month := now.Month()
    day := now.Day()
    hour := now.Hour()
    minute := now.Minute()
    send := now.Second()
    fmt.Printf("%02d-%02d-%02d %02d:%02d:%02d
    ", year, month, day ,hour, minute, send)
    
    //格式化时间
    now := time.Now()
    timeStr := now.Format("2006/01/02 15:04:05")  //go诞⽣于2006-01-02 15:04:05
    fmt.Printf("time:%s
    ", timeStr)
    
    //格式化时间
    now := time.Now()
    timeStr := fmt.Sprintf("%02d/%02d/%02d %02d:%02d:%02d
    ", now.Year(), now.Month(), now.Day() ,now.Hour(), now.Minute(), now.Second())
    fmt.Printf("time:%s
    ", timeStr)
    
    //时间戳
    timestamp := time.now().Unix() //unix时间戳,int64
    
    timeObj := time.Unix(timestamp, 0)
    year := timeObj.Year()
    month := timeObj.Month()
    day := timeObj.Day()
    hour := timeObj.Hour()
    minute := timeObj.Minute()
    send := timeObj.Second()
    
    fmt.Printf("current timestamp:%d
    ", timestamp)
    fmt.Printf("%02d-%02d-%02d %02d:%02d:%02d
    ", year, month, day ,hour, minute, send)
    
    //时间常量
    fmt.Printf("nano second:%d
    ", time.Nanosecond)
    fmt.Printf("micro second:%d
    ", time.Microsecond)
    fmt.Printf("mili second:%d
    ", time.Millisecond)
    fmt.Printf("second:%d
    ", time.Second)
    
    //给出时间字符串 计算时间差
    const TIME_LAYOUT = "2006/01/02 15:04:05" //时间格式模版,跟时间字符串格式一致
    str := "2018/09/10 00:00:00"
    t, _ := time.Parse(TIME_LAYOUT, str) //将时间转换为
    fmt.Println(t)
    fmt.Println(t.Sub(time.Now()).Milliseconds()) //-38929603501
    
    //给出时间戳转换为时间
    
    var ts int64= 1575467403
    u := time.Unix(ts, 0)
    fmt.Println(u)
    
    //睡1s
    
    time.Sleep(time.Second)
    <-time.NewTimer(time.Second).C
    <-time.After(time.Second)
    
    // 定时+回调(setTimeout)
    
    time.AfterFunc(time.Second, func() {
    	println("after 1s cb")
    })
    time.Sleep(time.Second*3)
    
    // 周期定时(setInterval)
    
    ticker := time.Tick(1*time.Second)
    for i := range ticker {
    	fmt.Printf("%v
    ", i)
    	processTask()
    }
    
    // 周期定时(setInterval)
    
    for  {
    	<-time.NewTicker(time.Second).C
    	println(1)
    }
    
    timer.Stop()            //清除定时器
    timer.Reset(time.Second)//重置定时器
    
    //比较时间早晚(返回bool)
    
    time.Now().Before(time.Now()) //true, 在这个时间之前吗
    time.Now().After(time.Now())
    time.Now().Equal(time.Now())
    
    //计算耗时
    
    t := time.Now()
    latency := time.Since(t)
    
    //获取随机数
    rand.Seed(time.Now().UnixNano()) //确保执行多次生成的随机数不同
    fmt.Println(rand.Intn(200))
    fmt.Println(rand.Intn(200))
    
    //随机睡眠多久
    rand.Intn(200) //随机获取200内整数
    time.Duration(rand.Intn(200)) //强制转换为Duration即类型, type Duration int64
    
    time.Sleep(time.Duration(10 * time.Millisecond)
    time.Sleep(time.Duration(rand.Intn(200)) * time.Millisecond)
    

    timer源码

    // Timer源码
    type Timer struct {
    	C <-chan Time
    	r runtimeTimer
    }
    
    
    func NewTimer(d Duration) *Timer {
    	c := make(chan Time, 1)
    	t := &Timer{
    		C: c,
    		r: runtimeTimer{
    			when: when(d),
    			f:    sendTime,
    			arg:  c,
    		},
    	}
    	startTimer(&t.r)
    	return t
    }
    
    • tickTimer
    func main() {
    	ticker := time.NewTicker(time.Second)
    	defer ticker.Stop()
    	done := make(chan bool)
    	go func() {
    		time.Sleep(10 * time.Second)
    		done <- true
    	}()
    	for {
    		select {
    		case <-done:
    			fmt.Println("Done!")
    			return
    		case t := <-ticker.C:
    			fmt.Println("Current time: ", t)
    		}
    	}
    }
    
    
    //源码
    type Ticker struct {
    	C <-chan Time // The channel on which the ticks are delivered.
    	r runtimeTimer
    }
    
    func NewTicker(d Duration) *Ticker {
    	if d <= 0 {
    		panic(errors.New("non-positive interval for NewTicker"))
    	}
    
    	c := make(chan Time, 1)
    	t := &Ticker{
    		C: c,
    		r: runtimeTimer{
    			when:   when(d),
    			period: int64(d),
    			f:      sendTime,
    			arg:    c,
    		},
    	}
    	startTimer(&t.r)
    	return t
    }
    
  • 相关阅读:
    Leetcode788.Rotated Digits旋转数字
    Leetcode788.Rotated Digits旋转数字
    Leetcode796.Rotate String旋转字符串
    Leetcode796.Rotate String旋转字符串
    Leetcode784.Letter Case Permutation字母大小写全排列
    Leetcode784.Letter Case Permutation字母大小写全排列
    Leetcode771.Jewels and Stones宝石与石头
    Leetcode771.Jewels and Stones宝石与石头
    Leetcode724.Find Pivot Index寻找数组的中心索引
    Leetcode724.Find Pivot Index寻找数组的中心索引
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/11961122.html
Copyright © 2011-2022 走看看