2015-01-30 4 views
2

한 시간대에서 다른 한 시간대로 cron 표현식을 변환하는 방법을 찾고 있습니다.

예를 들어 내 웹 클라이언트 사용자는 GMT + 1200이고 서버 측은 GMT + 0800이고 매주 화요일과 목요일 작업을 실행하는 사용자 설정 02:10은 cron 표현식이 "0 10 2 3, 5 *? ", 나는 다음과 같이 코드를 사용하고, 그것은

한 시간대에서 다른 시간대로 cron 표현식을 변환하십시오.

 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()); 

월 2월 2일 중부 표준시 22시 10분 0초 2015 인쇄됩니다 getNextValidTimeAfter하는 setTimeZone 후 (사용자의 시간대의 현재 화재의 시간을 얻을 수 있습니다 tz); 그러나 getExpreesionSummary 또는 getCronExpression()은 여전히 ​​"0 10 2 3,5 *?"입니다. 여기서 문자열은 "0 10 22 2,4 *?"가됩니다. DB에 저장하여 다음 시간에 화재를 일으킬 수 있고 또 다른 시간대 사용자가 설정을 쿼리 할 수 ​​있습니다 (원인은 "0 10 22 2,4 *?"를이 사용자의 시간대로 변환해야 함)

감사합니다

+0

이 문제에 대한 해결책이 있었습니까? 나는 또한 같은 문제를 겪고있다. –

+0

@ JyotiRanjan, 나는 아직도 이것을위한 해결책을 찾지 못했습니다. 나는 대화를 수동으로 만들었다. – Bruce

+0

자바에서이 변환을 위해 무언가 또는 코드를 찾으면 알려 드리겠습니다. 내 경우에는 js/jquery에 의해 수행된다면, 또한 괜찮습니다. –

답변

0

동일한 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 값 기준 날짜 (현재)와 동일한 시간대를 계산한다.