登录
首页 >  Golang >  Go问答

使用 gocraft 如何将时区传递给 cron 表达式?

来源:stackoverflow

时间:2024-02-10 11:18:20 189浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《使用 gocraft 如何将时区传递给 cron 表达式?》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我正在使用 github.com/gocraft/work 来创建 cron 作业。我的服务器时间是 utc,我希望 cron 作业根据特定时区执行,有没有办法在 gocraftworker 中指定带有时区的 cron 表达式。

    // Code here
    pool := work.NewWorkerPool(Context{}, 10, "test_namespace", redisPool)
    pool.PeriodicallyEnqueue("0 30 10 * * *", "export") // Runs at 10:30am everyday
    pool.Job("export", jobsHandler.SendExportReport)
   
    // Start processing jobs
    pool.Start()

    // Wait for a signal to quit:
    signalChan := make(chan os.Signal, 1)
    signal.Notify(signalChan, os.Interrupt, os.Kill)
    <-signalChan

正确答案


由于您使用的软件包期望服务器本地时间 (utc) 中的 cron 时间,并且您有特定的时区输入 - 只需将本地 (tz) 时间转换为 utc:

nyc, err := time.LoadLocation("America/New_York")
if err != nil {
    log.Fatal(err)
}

// 12:15:23 -0400 EDT
localTime := time.Date(
    2022, 5, 13, // date (ignored below)
    12,  // hour
    15,  // minute
    23,  // seconds,
    0,   // ns
    nyc, // tz
)

// tz Time in UTC
h, m, s := localTime.UTC().Clock()  // 16 15 23

cronTime := fmt.Sprintf("%d %d %d * * *", s, m, h) // 23 15 16 * * *

https://go.dev/play/p/QdpoLsDiPwR

终于介绍完啦!小伙伴们,这篇关于《使用 gocraft 如何将时区传递给 cron 表达式?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>