【问题标题】:Convert cron expression from one timezone to another one将 cron 表达式从一个时区转换为另一个时区
【发布时间】:2015-03-29 11:37:44
【问题描述】:

我正在寻找一种将 cron 表达式从一个时区转换为另一个时区的方法。

例如,我的 web 客户端用户是 GMT+1200,我的服务器端是 GMT+0800,而用户设置 02:10 每周二和周四执行任务,cron 表达式将是 0 10 2 3,5 * ?,而我已使用如下代码,它可以获取用户时区的当前触发时间

CronExpression expr = new CronExpression("0 10 2 3,5 * ?");
        
System.out.println(expr.getNextValidTimeAfter(new Date()));
System.out.println(expr.getTimeZone());
System.out.println(expr.getExpressionSummary());
System.out.println("=======");
TimeZone tz = TimeZone.getTimeZone("GMT+1200");
expr.setTimeZone(tz);
System.out.println(expr.getNextValidTimeAfter(new Date()));
System.out.println(expr.getTimeZone());
System.out.println(expr.getExpressionSummary());

getNextValidTimeAfter 将打印Mon Feb 02 22:10:00 CST 2015,在setTimeZone(tz); 之后,但是getExpreesionSummary 甚至getCronExpression() 仍将是0 10 2 3,5 * ?,我想要获取字符串的位置将是0 10 22 2,4 * ?,然后我可以保存到数据库中以备下次触发,也可以保存到另一个时区用户来查询设置(当然这需要将0 10 22 2,4 * ?转换为该用户的时区)

感谢任何帮助

【问题讨论】:

  • 您对此有什么解决方案吗?我也遇到了同样的问题。
  • @JyotiRanjan,我还没有找到任何解决方案。我已经手动进行了对话。
  • 好的,如果我在 java 中找到此转换的内容或代码,我会通知您。在我的情况下,如果它是由 js/jquery 完成的,那么也可以。

标签: java cron timezone timezone-offset


【解决方案1】:

如果您愿意保留相同的 cron 表达式,但根据日期时区进行上下文计算(以便用户和服务器端根据他们的时区获得下一次执行相同的表达式),您可以使用 cron-utils,它提供了这样的功能.自 3.1.1 版以来,所有下一个/上一个执行计算都与时区相关。

他们在文档中提供了一个示例:

//Get date for last execution
DateTime now = DateTime.now();
ExecutionTime executionTime = ExecutionTime.forCron(parser.parse("* * * * * * *"));
DateTime lastExecution = executionTime.lastExecution(now));

//Get date for next execution
DateTime nextExecution = executionTime.nextExecution(now));

nextExecution 值将针对与参考日期(现在)相同的时区进行计算。

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 2012-10-27
    • 2015-02-21
    • 1970-01-01
    • 2012-01-30
    • 2015-05-06
    • 2021-01-23
    • 2013-12-03
    相关资源
    最近更新 更多