【问题标题】:Scala - schedule a task at a given time of the day: run a task everyday at 6pmScala - 在一天中的给定时间安排任务:每天下午 6 点运行任务
【发布时间】:2015-08-11 14:08:35
【问题描述】:

我的问题是我如何安排每天在给定时间执行的任务。

我有下一个代码:

class ScheduleService {
   private val mail = new MailController

   def sendMailSchedule={

     val actorSystem = ActorSystem()
     val scheduler = actorSystem.scheduler
     val task = new Runnable { 
      def run() { 
        mail.sendMail("user@gmail.com", "Subject", "Body")
        println("Send")} 
      }
     implicit val executor = actorSystem.dispatcher

     scheduler.schedule(
       initialDelay = 0 seconds,
       interval = 7 day,
       runnable = task)
  }
}

实现了邮件控制器并发送邮件。

此代码每 7 天发送一次邮件。我想要的是每天下午 6 点发邮件。

【问题讨论】:

标签: scala email task scheduler schedule


【解决方案1】:

在您的代码中,初始延迟为零秒。如果您计算从现在到下一个下午 6 点之间的时间距离,然后将其用作初始延迟,标准延迟为 1 天,您将得到您想要的。

例如,如果现在是下午 4:45,您希望初始延迟 75 分钟。

scheduler.schedule(
   initialDelay = timeToNext6pm,
   interval = 1 day,
   runnable = task)

【讨论】:

  • “标准延迟 1 天,你会得到你想要的”是什么意思?我得到了关于 initialDelay 的部分,我将尝试实现它,但你的意思是将间隔设置为 1 天吗? (间隔:1天)?在设置了 initialDelay 之后,我每天怎么说?
  • 只要确保你没有硬编码timeToNext6pm,而是在运行时计算它。
  • 谢谢!它起作用了:我用 Calendar.getInstance.getTime 计算时间。
  • 您可以考虑 DST 和 TimeZone,如果您按照完全固定的时间间隔,它可能会提前一小时或提前一小时,具体取决于 GST。
猜你喜欢
  • 2015-05-09
  • 1970-01-01
  • 2015-12-03
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
相关资源
最近更新 更多