目前有这个cron代码在下面,这是从here试图使这可以,以便它可以运行作业(job)只在工作日.

package main

import (
    "fmt"
    "time"
)

const INTERVAL_PERIOD time.Duration = 24 * time.Hour

const HOUR_TO_TICK int = 23
const MINUTE_TO_TICK int = 21
const SECOND_TO_TICK int = 03

type jobTicker struct {
    t *time.Timer
}

func getNextTickDuration() time.Duration {
    now := time.Now()
    nextTick := time.Date(now.Year(), now.Month(), now.Day(), HOUR_TO_TICK, MINUTE_TO_TICK, SECOND_TO_TICK, 0, time.Local)
    if nextTick.Before(now) {
        nextTick = nextTick.Add(INTERVAL_PERIOD)
    }
    return nextTick.Sub(time.Now())
}

func NewJobTicker() jobTicker {
    fmt.Println("new tick here")
    return jobTicker{time.NewTimer(getNextTickDuration())}
}

func (jt jobTicker) updateJobTicker() {
    fmt.Println("next tick here")
    jt.t.Reset(getNextTickDuration())
}

func main() {
    jt := NewJobTicker()
    for {
        <-jt.t.C
        fmt.Println(time.Now(), "- just ticked")
        jt.updateJobTicker()
    }
}

我怎么才能让它只在工作日运行?

推荐答案

您应该在您的getNextTickDuration()函数中判断星期几.它可能看起来像这样

func getNextTickDuration() time.Duration {
    now := time.Now()
    nextTick := time.Date(now.Year(), now.Month(), now.Day(), HOUR_TO_TICK, MINUTE_TO_TICK, SECOND_TO_TICK, 0, time.Local)
    for nextTick.Before(now) || nextTick.Weekday() == time.Saturday || nextTick.Weekday() == time.Sunday {
        nextTick = nextTick.Add(INTERVAL_PERIOD)
    }
    return nextTick.Sub(time.Now())
}

Go相关问答推荐

Pulumi-S3-当策略依赖于访问点时,如何将AccesspintPolicy附加到访问点

编辑时保留YAML文件中的单引号

为什么Slices包中的函数定义Slice参数的类型参数?

Websocket服务器实现与x/net库trowing 403

如何使redis池的等待超时

无效操作:v > max(类型参数 T 与 > 不可比较)

Json.Unmarshal() 和 gin.BindJson() 之间的区别

如何从 Go Lambda 函数返回 HTML?

Yocto 无法交叉编译 GoLang Wails 应用程序

获取 nil 指针类型的 reflect.Value

创建新对象后如何返回嵌套实体?

在 .go 文件中运行一个函数和在 Go 模板中调用它有什么区别?

errors.Wrap 和 errors.WithMessage 有什么区别

仅在工作日运行 cron

查找、解析和验证邮箱地址

try 运行 docker-compose up -d 时出现错误

我如何解码 aes-256-cfb

跟踪长时间运行的任务的进度 - 正确的方法

递归数据 struct 解组在 Go Lang Protobuf 中给出错误无法解析无效的线格式数据

全局记录(across packages)