zoukankan      html  css  js  c++  java
  • Go 时间处理

    注:言淦: Go指南13-时间处理一览: https://juejin.cn/post/6844904047212757005#heading-5

    获取当前时间

    import time
    
    func getCurTime() {
    	// 本地时间(如果是在中国,获取的是东八区时间)
    	curLocalTime := time.Now()
    	// UTC时间
    	curUTCTime := time.Now().UTC()
    	fmt.Println(curLocalTime, curUTCTime)
    }
    

    设置时区

    func setTimeZone() {
    	curLocalTime := time.Now()
    	curUtcTime := curLocalTime.In(time.UTC)
    	fmt.Println(curUtcTime)
    }
    

    时间类型转字符串: Format函数

    func time2TimeStr() {
    	localTimeStr := time.Now().Format("2006-01-02 15:04:05")
    	// UTC时间
    	utcTimeStr := time.Now().UTC().Format("2006-01-02 15:04:05")
    	fmt.Println(localTimeStr, utcTimeStr)
    }
    

    时间类型转时间戳: Unix函数

    func time2TimeStr() {
    	localTimeStr := time.Now().Format("2006-01-02 15:04:05")
    	// UTC时间
    	utcTimeStr := time.Now().UTC().Format("2006-01-02 15:04:05")
    	fmt.Println(localTimeStr, utcTimeStr)
    }
    

    时间戳转时间类型:Unix函数

    func timestamp2Time() {
    	timestamp := time.Now().Unix()
    	localTimeObj := time.Unix(timestamp, 0)
    	fmt.Println(localTimeObj)
    }
    

    时间字符串转时间类型:parse函数

    func timeStr2Time() {
    	timeStr := "2020-01-13 22:32:17"
    	// 返回的是UTC时间 2020-01-13 22:32:17 +0000 UTC
    	utcTimeObj, err := time.Parse("2006-01-02 15:04:05", timeStr)
    	if err == nil {
    		fmt.Println(utcTimeObj, utcTimeObj.Unix())
    	}
    
    	// 返回的是当地时间 2020-01-13 22:32:17 +0800 CST
    	localTimeObj, err := time.ParseInLocation("2006-01-02 15:04:05", timeStr, time.Local)
    	if err == nil {
    		fmt.Println(localTimeObj)
    	}
    }
    

    时间字符串转时间戳:

    parse函数 + Unix函数

    时间戳转字符串:

    Unix函数 + Format函数

    时间加减

    注:(转换为Time类型比较容易做加减)

    func addTime() {
    	curTime := time.Now()
    	// 加1秒
    	addSecondTime := curTime.Add(time.Second * 1)
    	// 加1分钟
    	addMinuteTime := curTime.Add(time.Minute * 1)
    	addMinuteTime2 := curTime.Add(time.Second * time.Duration(60*1))
    	fmt.Println(addSecondTime, addMinuteTime, addMinuteTime2)
    }
    

    周期任务:每隔5秒

    func intervalTask() {
    	ticker := time.NewTicker(time.Second * 5)
    	go func() {
    		for _ = range ticker.C {
    			fmt.Println("do the thing")
    		}
    	}()
    
    	time.Sleep(time.Minute)
    }
    

    倒计时任务:主线程阻塞

    func countDownSyncTask() {
    	timer1 := time.NewTimer(time.Second * 5)
    	<-timer1.C
    	fmt.Println("do the thing")
    }
    

    倒计时任务:主线程不阻塞

    func countDownAsyncTask() {
    	timer1 := time.NewTimer(time.Second * 3)
    
    	go func() {
    		//等触发时的信号
    		<-timer1.C
    		fmt.Println("do the thing")
    	}()
    	//由于上面的等待信号是在新线程中,所以代码会继续往下执行,停掉计时器
    	time.Sleep(time.Second * 10)
    }
    

    定时任务,每天10:00:00触发

    func scheduleTask() {
    	go func() {
    		for {
    			fmt.Println("触发的事件")
    			now := time.Now()
    			// 计算下一个零点
    			next := now.Add(time.Hour * 24)
    			next = time.Date(next.Year(), next.Month(), next.Day(), 
    						  10, 0, 0, 0, next.Location())
    			fmt.Println(next.Sub(now))
    			t := time.NewTimer(next.Sub(now))
    			<-t.C
    		}
    	}()
    	time.Sleep(time.Hour * 24)
    }
    
  • 相关阅读:
    !!“理都懂”为什么“然并卵”?
    启明创投甘剑平:破解独角兽公司的基因密码
    任正非:华为3年前应该快垮了
    C语言 · 8皇后问题改编
    C语言 · 数的划分
    C语言 · 8皇后问题
    C语言 · 数字黑洞
    C语言 · FBI树
    C语言 · 超级玛丽
    C语言 · 数的划分
  • 原文地址:https://www.cnblogs.com/guohewei/p/15190807.html
Copyright © 2011-2022 走看看