crontab格式 & golang时间格式

crontab格式

crond是linux下用于周期性地执行某个任务的一个守护进程,crond进程会每分钟检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。向crond进程提交crontab文件即可设置周期任务。

用户所建立的crontab文件中,每一行都代表一项任务,,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute  hour  day  month  week  command

参数含义

  • minute: 表示分钟,可以是从0到59之间的任何整数。

  • hour:表示小时,可以是从0到23之间的任何整数。

  • day:表示日期,可以是从1到31之间的任何整数。

  • month:表示月份,可以是从1到12之间的任何整数。

  • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

注意,crontab不支持 数字/数字 的格式,比如 5/10 不能够实现从5分开始,每10分钟执行一次。可以在

https://crontab.guru/ 上检查crontab格式是否正确

在这里插入图片描述

图中显示这个语句时不标准的,有可能某些时间点不执行(实测确实如此)

调用远程调度服务 时,可以用crontab中*的写法,创建周期执行的任务。创建任务时,不需要提供日期,只需要提供开始时刻。参考dorado,周期任务有几个级别

在这里插入图片描述

分钟级任务只能选时间间隔10、20和30,然后还要一个执行时刻,比如间隔为10,这个时刻就是0-9之间的一个数字。其他级别同理。

当前先实现分钟级别的调度,其他的后面再补充。

实现分钟级的时候,可以先直接以当前时间作为开始执行时间发送,后面再补充。

golang时间格式

其他语言一般格式化字符串是yyyy-MM-dd HH:mm:ss,而Go语言是使用Go的诞生时间2006-01-02 15:04:05。

go 的time package 提供了两个函数:

  • time.Format函数,用来对时间进行格式化输出;

  • time.Parse函数,用来解析字符串类型的时间到time.Time。

time.Format

参考 golang 格式化时间总结

time.Format函数把time.Time类型的时间转换成格式化字符串

now := time.Now()
fmt.Println(now.Format("2006-01-02 15:04:05")) 

time.Parse

参考 https://my.oschina.net/iyf/blog/601377

time.Parse函数把字符串格式的时间解析成time.Time类型的时间。

withNanos := "2006-01-02 15:04:05"
t, _ := time.Parse(withNanos, "2013-10-05 18:30:50")
fmt.Println(t.Year())
fmt.Println(t.Month())
fmt.Println(t.Day()) //多少号
fmt.Println(t.Weekday()) //星期几
fmt.Println(t.Hour()) 
fmt.Println(t.Minute())
fmt.Println(t.Second())

把 hh:mm格式的字符串解析成time.Time类型的时间。

t, _ := time.Parse("15:04", "21:54")
fmt.Println(t.Hour()) 
fmt.Println(t.Minute())

时间加减

参考 https://studygolang.com/articles/8919

比如给目标时间加三分钟

withNanos := "2006-01-02 15:04:05"
t, _ := time.Parse(withNanos, "2020-08-04 17:50:00")
m, _ := time.ParseDuration("+1m")
m1 := t.Add(3 * m)
fmt.Println(m1) //输出 2020-08-04 17:53:00 +0000 UTC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值