gpt4 book ai didi

java - 将 cron 表达式从一个时区转换为另一时区

转载 作者:行者123 更新时间:2023-12-02 07:37:49 27 4
gpt4 key购买 nike

我正在寻找一种将 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 * ? 到该用户的时区)

感谢任何帮助

最佳答案

如果您愿意保留相同的 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 值将在与引用日期(现在)相同的时区进行计算。

关于java - 将 cron 表达式从一个时区转换为另一时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28228364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com