You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
3.9 KiB

5 months ago
package rocron
import (
"fmt"
)
var (
YearlySpec = "0 0 0 1 1 *"
YearlyExplain = "每年一次1 月 1 日午夜执行一次"
AnnuallySpec = "0 0 0 1 1 *"
AnnuallyExplain = "每年一次1 月 1 日午夜执行一次"
MonthlySpec = "0 0 0 1 * *"
MonthlyExplain = "每月执行,午夜,月初执行一次"
WeeklySpec = "0 0 0 * * 0"
WeeklyExplain = "每周执行,周六和周日之间的午夜执行一次"
DailySpec = "0 0 0 * * *"
DailyExplain = "每天午夜执行一次"
MidnightSpec = "0 0 0 * * *"
MidnightExplain = "每天午夜执行一次"
HourlySpec = "0 0 * * * *"
HourlyExplain = "每小时运行,每小时开始执行一次"
)
/*
*
second (0 - 60)
min (0 - 59)
hour (0 - 23)
day of month (1 - 31)
month (1 - 12)
day of week (0 - 6) (0 to 6 are Sunday to
Saturday)
* * * * * *
*/
const (
secondsSpec = "*/%d * * * * *"
minutesSpec = "%d */%d * * * *"
hoursSpec = "%d %d */%d * * *"
daySpec = "%d %d %d */%d * *"
daysSpec = "%d %d %d %s * *"
)
// GetSecondSpec 每隔秒
func GetSecondSpec(seconds int) string {
seconds = filterSeconds(seconds)
return fmt.Sprintf(secondsSpec, seconds)
}
// GetSecondExplain 每隔秒
func GetSecondExplain(seconds int) string {
seconds = filterSeconds(seconds)
return fmt.Sprintf("每隔 %d 秒执行一次", seconds)
}
// GetMinuteSpec 每隔分钟
func GetMinuteSpec(minutes, seconds int) string {
minutes = filterMinutes(minutes)
seconds = filterSeconds(seconds)
return fmt.Sprintf(minutesSpec, seconds, minutes)
}
// GetMinuteExplain 每隔分钟
func GetMinuteExplain(minutes, seconds int) string {
minutes = filterMinutes(minutes)
seconds = filterSeconds(seconds)
if seconds <= 0 {
return fmt.Sprintf("每隔 %d 分钟执行一次", minutes)
}
return fmt.Sprintf("每隔 %d 分钟 %d 秒执行一次", minutes, seconds)
}
// GetHourSpec 每隔小时
func GetHourSpec(hours, minutes, seconds int) string {
hours = filterHours(hours)
minutes = filterMinutes(minutes)
seconds = filterSeconds(seconds)
return fmt.Sprintf(hoursSpec, seconds, minutes, hours)
}
// GetHourExplain 每隔小时
func GetHourExplain(hours, minutes, seconds int) string {
hours = filterHours(hours)
minutes = filterMinutes(minutes)
seconds = filterSeconds(seconds)
if seconds <= 0 {
if minutes <= 0 {
return fmt.Sprintf("每隔 %d 小时执行一次", hours)
}
return fmt.Sprintf("每隔 %d 小时 %d 分执行一次", hours, minutes)
}
return fmt.Sprintf("每隔 %d 小时 %d 分 %d 秒执行一次", hours, minutes, seconds)
}
// GetDaySpec 天
func GetDaySpec(day, hours, minutes, seconds int) string {
day = filterDays(day)
hours = filterHours(hours)
minutes = filterMinutes(minutes)
seconds = filterSeconds(seconds)
return fmt.Sprintf(daySpec, seconds, minutes, hours, day)
//days := concatenateStrings(day)
//return fmt.Sprintf(daysSpec, seconds, minutes, hours, days)
}
// GetDayExplain 天
func GetDayExplain(days, hours, minutes, seconds int) string {
days = filterDays(days)
hours = filterHours(hours)
minutes = filterMinutes(minutes)
seconds = filterSeconds(seconds)
if seconds <= 0 {
if minutes <= 0 {
if hours <= 0 {
return fmt.Sprintf("每隔 %d 天执行一次", days)
}
return fmt.Sprintf("每隔 %d 天 %d 时执行一次", days, hours)
}
return fmt.Sprintf("每隔 %d 天 %d 时 %d 分执行一次", days, hours, minutes)
}
return fmt.Sprintf("每隔 %d 天 %d 时 %d 分 %d 秒执行一次", days, hours, minutes, seconds)
}