1

我正在尝试构建一个在每周五晚上 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. 但是有什么理由这样打印吗?如果其他人有相同的时间和时区,我会睡得更好。

4

1 回答 1

1

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

您可以通过调用将它们转换为您的当地时间ToLocalTime()

foreach (var date in dates)
    Console.WriteLine (date.ToLocalTime().ToString());
于 2013-09-12T13:21:26.137 回答