2014-07-15 2 views
0

나는 문자열 (예 : timeString = "2:00 PM")으로 주어진 시간을 가지고 있으며, DateTime을 파싱하여 Quartz에서 내 CronTrigger의 .StartAt()으로 전달하고 싶습니다. 그러나 DateTime.Parse(timeString)은 내가 을 얻은 이후로 .StartAt()에 대한 잘못된 형식이라고 생각하는 7/15/2014 2:00:00 PM을 제공합니다. 나는 또한 DateTime.Parse(timeString).ToUniversalTime(), DateTimeOffset.Parse(timeString)DateTimeOffset.Parse(timeString).ToUniversalTime()을 시도했으며 같은 오류가 발생했습니다.Quartz StartAt time 적절한 DateTime 형식?

온라인으로 볼 때 올바른 형식이 무엇인지 잘 모르겠습니다.

다음은 관련 코드입니다. 모든 변수 (triggerName, groupName 등)는 함수에 올바르게 전달됩니다.

return TriggerBuilder.Create() 
    .WithIdentity(triggerName, groupName) 
    .StartAt(DateTime.Parse(startString)) 
    .WithCronSchedule(cronSchedule) 
    .Build(); 
+1

예외는 무엇입니까? 'DateTime.Parse' 내에 있는지 또는 Quartz 이슈인지 여부를 아는 것이 유용 할 것입니다. –

+0

Visual Studio에서 다음 질문에 포함 된 코드를 강조 표시했습니다 : "FormatException이 처리되지 않았습니다. 처리되지 않은 'System.FormatException'형식의 예외가 Quartz.dll에서 발생했습니다. 추가 정보 : 일주일의 매개 변수가 구현되지 않았습니다. " – user2424607

+1

도움이된다면,'cronSchedule' 문자열은'0 0/1 *? * MON-FRI'이므로 주중 요일과 요일을 모두 지정하지 않습니다. 나는 문제가'.StartAt()'부분이라고 확신한다. – user2424607

답변

0

Quartz에서는 cron 표기법을 사용해야합니다. 이 형식을 사용하는 경우 다음과 같이 cron 표현식을 생성 할 수 있습니다.

String.Format("0 {0} {1} * *", (timeString[2]+timeString[3]), timeString[0]); 

이제 24 시간 형식으로 작업해야합니다. 나는 당신이 당신의 프로그램에서 시간을 포맷하는 방법을 변경하는 것이 좋습니다,하지만 당신의 형식이 방법 오후의 경우는 감지 할 수 있습니다 :

if(timeString.Split(' ')[1] == "PM") 
1

TriggerBuilder합니다 (TriggerBuilder.cs 파일)을 DateTimeOffset으로 기대 :

public TriggerBuilder StartAt(DateTimeOffset startTimeUtc) 
{ 
    startTime = startTimeUtc; 
    return this; 
} 

DateTimeOffset Parse 메서드의 documentation에서 날짜 및 시간에 필요한 형식의 예를 살펴보십시오.

마지막으로 UTC로 Quartz.Net에 시간을 전달해야합니다. 따라서 예상대로 변환해야합니다.