我目前正在从事一个使用Quartz调度器的项目。
我一直在开发一个功能,使用以下方法显示当前活动作业的不同详细信息。
public IEnumerable<ActiveScheduleJob> GetAllActiveScheduls()
{
var activeScheduls = new List<ActiveScheduleJob>();
try
{
IList<string> jobGroups = scheduler.GetJobGroupNames();
// IList<string> triggerGroups = scheduler.GetTriggerGroupNames();
ActiveScheduleJob ASJ;
foreach (string group in jobGroups)
{
var groupMatcher = GroupMatcher<JobKey>.GroupContains(group);
var jobKeys = scheduler.GetJobKeys(groupMatcher);
foreach (var jobKey in jobKeys)
{
var detail = scheduler.GetJobDetail(jobKey);
var triggers = scheduler.GetTriggersOfJob(jobKey);
foreach (ITrigger trigger in triggers)
{
ASJ = new ActiveScheduleJob();
ASJ.Group = group;
ASJ.Name = jobKey.Name;
ASJ.Description = detail.Description;
ASJ.TriggerKeyName = trigger.Key.Name;
ASJ.TriggerKeyGroup = trigger.Key.Group;
ASJ.TriggerGetTypeName = trigger.GetType().Name;
ASJ.TriggerState = scheduler.GetTriggerState(trigger.Key);
ASJ.NextFireTime = trigger.GetNextFireTimeUtc();
if (ASJ.NextFireTime.HasValue)
{
ASJ.NextFireTimeString = ASJ.NextFireTime.Value.LocalDateTime.ToString();
}
ASJ.PreviousFireTime = trigger.GetPreviousFireTimeUtc();
if (ASJ.PreviousFireTime.HasValue)
{
ASJ.PreviousFireTimeString = ASJ.PreviousFireTime.Value.LocalDateTime.ToString();
}
ASJ.FullJobString = $"Trigger Name: {ASJ.TriggerKeyName} | Trigger Group: {ASJ.TriggerKeyGroup} | Trigger State: {ASJ.TriggerState} | Trigger Get Type: {ASJ.TriggerGetTypeName} | Job Name: {ASJ.Name} | Job Group: {ASJ.Group} | Next Fire Time: {ASJ.NextFireTimeString} | Previous Fire Time: {ASJ.PreviousFireTimeString} | Description: {ASJ.Description}";
activeScheduls.Add(ASJ);
}
}
}
}
catch (Exception ex)
{
logging.WriteLog(1, "JobScheduler", "GetAllActiveScheduls", "Hent alle aktive job+triggers", $"EXCEPTION MESSAGE: {ex.Message} | EXCEPTION INNER: {ex.InnerException}", LogType.Exception, "");
}
return activeScheduls;
}
它本身的方法工作得很好,我的问题在于GetNextFireTime()方法给出的UTC时间比我的GMT+1/UTC+1晚了一个小时。
显示时:
10-01-2018 07:00:00 +00:00
应显示:
10-01-2018 08:00:00 +01:00
我查看了以下链接:
Working With DateTimeOffset
试着用什么
Marko Lahma
上述方法可用于转换DateTimeOffset。但我遇到了一堵无法转换的墙,因为GetNextFireTime()返回DataTimeOffset?而我所尝试的,无法转换可为null的东西。所以我有点不知所措