Quartz StartAt时间适当的DateTime格式?

时间:2014-07-15 16:46:13

标签: c# datetime quartz-scheduler quartz.net

我有一个字符串给出的时间(例如:timeString = "2:00 PM"),并希望从中解析DateTime以传递给我在Quartz中的CronTrigger .StartAt()。但是,DateTime.Parse(timeString)给了我7/15/2014 2:00:00 PM,我认为这是.StartAt()的格式不正确,因为我得到FormatException。我还尝试了DateTime.Parse(timeString).ToUniversalTime()DateTimeOffset.Parse(timeString)DateTimeOffset.Parse(timeString).ToUniversalTime(),但也遇到了同样的错误。

在线查看,我不确定格式是否正确。

这是相关代码。所有变量(triggerNamegroupName等)都正确地传递给函数。

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

2 个答案:

答案 0 :(得分:1)

TriggerBuilder需要一个DateTimeOffset(来自TriggerBuilder.cs文件):

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

查看DateTimeOffset Parse方法的documentation,了解日期和时间所需的格式示例。

最后,您应该总是将时间传递给UTC中的Quartz.Net,因为这是它所期望的,所以相应地进行转换。

答案 1 :(得分:0)

你必须在Quartz中使用cron表示法。如果您计划在这段时间内使用此格式,则可以通过以下方式生成cron表达式:

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

现在您必须使用24小时格式才能工作。我建议您更改格式化程序时间的方式,但是您可以通过这种方式检测它的格式是否正确:

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