为什么只有第一个触发时间正确?

时间:2013-09-12 09:46:05

标签: c# quartz.net

我正在尝试构建一个触发器,每周五晚上11:59运行。我正在使用Quartz .NET v2.2.4。我的时区是+8:00。这就是我想出的。

ITrigger trigger = TriggerBuilder.Create()                
            .WithDailyTimeIntervalSchedule(x=> x
                                           .OnDaysOfTheWeek(DayOfWeek.Friday)
                                           .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(23, 59))
                                           .WithRepeatCount(-1)
                                           )
            .Build();

DateTimeOffset origin = new DateTimeOffset(DateTime.Now);
DateTimeOffset end = origin.AddDays(100);

IList<DateTimeOffset> dates = TriggerUtils.ComputeFireTimesBetween(trigger as IOperableTrigger, null, origin, end);

foreach(var date in dates)
{
   Console.WriteLine(date.ToString());
}

然而,问题是这会打印以下内容

9/13/2013 11:59:00 PM +08:00
9/20/2013 3:59:00 PM +00:00
9/27/2013 3:59:00 PM +00:00
10/4/2013 3:59:00 PM +00:00
10/11/2013 3:59:00 PM +00:00

我了解11:59:00 PM +08:00等于3:59:00 PM +00:00。但有没有任何理由为什么它这样打印?如果其他人有相同的时间和时区,我会睡得更好。

1 个答案:

答案 0 :(得分:1)

正如你所说,日期是等价的。有些用UTC表示,有些用当地时间表示。

您可以致电ToLocalTime()

将其转换为当地时间
foreach (var date in dates)
    Console.WriteLine (date.ToLocalTime().ToString());