Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将cron表达式从一个时区转换为另一个时区_Java_Cron_Timezone_Timezone Offset - Fatal编程技术网

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

Java 将cron表达式从一个时区转换为另一个时区,java,cron,timezone,timezone-offset,Java,Cron,Timezone,Timezone Offset,我正在寻找一种将cron表达式从一个时区转换为另一个时区的方法 例如,我的web客户端用户是GMT+1200,服务器端是GMT+0800,当用户设置02:10以每周二和周四执行任务时,cron表达式将是0 10 2 3,5*?,我使用了如下代码,它可以获取用户时区的当前启动时间 CronExpression expr=新的CronExpression(“0 10 2 3,5*?”); System.out.println(expr.getNextValidTimeAfter(newdate())

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

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

CronExpression expr=新的CronExpression(“0 10 2 3,5*?”);
System.out.println(expr.getNextValidTimeAfter(newdate());
System.out.println(expr.getTimeZone());
System.out.println(expr.getExpressionSummary());
System.out.println(“==========”);
时区tz=时区.getTimeZone(“GMT+1200”);
expr.设置时区(tz);
System.out.println(expr.getNextValidTimeAfter(newdate());
System.out.println(expr.getTimeZone());
System.out.println(expr.getExpressionSummary());
getNextValidTimeAfter
将打印
Mon Feb 02 22:10:00 CST 2015
,在
setTimeZone(tz)之后
,但是
GetExpressionSummary
甚至
getCronExpression()
仍将是
0 10 2 3,5*?
,我想获取字符串的位置将是
0 10 22 2,4*?
,然后我可以保存到DB中,以便下次fire和另一个时区用户查询设置(当然,这需要将
0 10 22 2,4*?
转换为此用户的时区)


如果您愿意保留相同的cron表达式,但根据日期时区进行上下文计算(以便用户和服务器端根据其相同表达式的时区获得下一次执行),请提供任何帮助,您可以使用,它提供了此类功能。自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值将针对与参考日期(现在)相同的时区进行计算。

如果您愿意保留相同的cron表达式,但根据日期时区进行上下文计算(以便用户和服务器端根据其相同表达式的时区获得下一次执行),您可以使用,它提供了此类功能。自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));

下一个执行值将在与参考日期(现在)相同的时区计算.

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