为什么只有第一次触发时间是正确的

本文关键字:时间 第一次 为什么 | 更新日期: 2023-09-27 18:31:12

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

为什么只有第一次触发时间是正确的

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

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

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