分享
  1. 首页
  2. 文章

Golang入门-时间处理

言淦 · · 2556 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

获取当前时间

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 getCurTimeStamp() {
	// 时间戳,精确到秒
	timestamp := time.Now().Unix()
	// 时间戳,精确到纳秒
	timestampNano := time.Now().UnixNano()
	fmt.Println(timestamp, timestampNano)
}
复制代码

时间戳转时间类型: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)
}
复制代码

注:这部分摘抄自想入飞飞的《Golang周期任务、定时任务》: www.jianshu.com/p/4955e5d65...

周期任务:每隔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)
}
复制代码

有疑问加站长微信联系(非本文作者)

本文来自:掘金

感谢作者:言淦

查看原文:Golang入门-时间处理

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2556 次点击
2 回复 | 直到 2025年04月29日 16:48:03
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏