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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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)
}