分享
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)
}
复制代码
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2556 次点击
上一篇:Go 并发编程中的经验教训
下一篇:go语言切片用法详解
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
获取当前时间
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)
}
复制代码