Quartz.NET - Использование / понимание триггера на основе cron и часового пояса / летнего времени (летнее время)

Для примера давайте используем следующее выражение cron: "0 0 14 1 *? "->

 Пожар 1-го числа каждого месяца в 14:00 часов.

Я использовал Quartz CronScheduleBuilder для построения expession, но это не имеет значения.

Мой местный часовой пояс - UTC + 01: 00, а летнее время (в этом году) начинается 31.03.2013 в 2:00, где время установлено на 3:00.

Когда я планирую новое задание, используя предложенный триггер, скажем, 20.02.2013, Quartz вычисляет System.DateTimeOffset для "NextFireTimeUtc» правильно:

DateTime: 01.03.2013 13:00:00 (это время UTC, которое на один час отстает от местного часового пояса)

LocalDateTime: 01.03.2013 14:00:00

Задание будет правильно запущено в 14:00 часов, как указано.

Теперь, если я планирую работу на 20.03.2013, то "NextFireTimeUtc» результаты в:

DateTime: 01.04.2013 13:00:00 (это время UTC, которое теперь на два часа меньше местного часового пояса)

LocalDateTime: 01.04.201315:00:00

Обратите внимание, что результирующий NextFireTimeUtc теперь попадает в местное летнее время. В результате LocalDateTime был такжеисправленный" на дополнительный час от UTC. Это приводит к тому, что работа выполняется в 15:00 часов, а это не то, чего я хочу.

Я (очевидно) ожидал, что14" в выражении cron всегда должен срабатывать триггер в 14:00, даже в летнее время.

Должен быть простой способ справиться с этим явлением, я, вероятно, просто что-то упускаю из виду Я сбит с толку.

РЕДАКТИРОВАТЬ:

Проблема, кажется, в том, что Кварц вычисляетпервый NextFireTimeUtc в зависимости отток информация о часовом поясе. Чтобы проверить это, я запланировал два разных триггера cron и вызвал GetFireTimeAfter () для триггера с увеличивающимся смещением, чтобы просмотреть итоговое время срабатывания за год.

Триггер 1: стрельба 28 числа каждого месяца в 14:00

GetFireTimeПосле сейчас + 00 месяцев: 28.03.201313:00:00 +00: 00 <- это правильно

GetFireTimeПосле сейчас + 01 месяц: 28.04.2013 12:00:00 +00: 00

GetFireTimeПосле сейчас + 02 месяца: 28.05.2013 12:00:00 +00: 00

GetFireTimeПосле сейчас + 03 месяца: 28.06.2013 12:00:00 +00: 00

GetFireTimeПосле сейчас + 04 месяца: 28.07.2013 12:00:00 +00: 00

GetFireTimeПосле сейчас + 05 месяцев: 28.08.2013 12:00:00 +00: 00

GetFireTimeПосле сейчас + 06 месяцев: 28.09.2013 12:00:00 +00: 00

GetFireTimeПосле сейчас + 07 месяцев: 28.10.2013 13:00:00 +00: 00 <- лето уже закончилось

GetFireTimeПосле сейчас + 08 месяцев: 28.11.2013 13:00:00 +00: 00

Первое время стрельбы правильное, так как оно все еще попадает взима», Времена "лето" отключены дополнительным -1, в результате чего правильное время стрельбы после того, как местный часовой пояс добавляет +2.

Триггер 1: стрельба в первый день каждого месяца в 14:00

GetFireTimeПосле сейчас + 00 месяцев: 01.04.201313:00:00 +00: 00 <- это не верно?

GetFireTimeПосле сейчас + 01 месяц: 01.05.2013 12:00:00 +00: 00

GetFireTimeПосле сейчас + 02 месяца: 01.06.2013 12:00:00 +00: 00

GetFireTimeПосле сейчас + 03 месяца: 01.07.2013 12:00:00 +00: 00

GetFireTimeПосле сейчас + 04 месяца: 01.08.2013 12:00:00 +00: 00

GetFireTimeПосле сейчас + 05 месяцев: 01.09.2013 12:00:00 +00: 00

GetFireTimeПосле сейчас + 06 месяцев: 01.10.2013 12:00:00 +00: 00

GetFireTimeПосле сейчас + 07 месяцев: 01.11.2013 13:00:00 +00: 00 <- лето уже закончилось

GetFireTimeПосле сейчас + 08 месяцев: 01.12.2013 13:00:00 +00: 00

Первый пожар уже приходится на летнее время, но его смещение только на -1, что приводит к локальному времени срабатывания 15:00.

Таким образом, триггер в порядке, за исключением первого времени запуска, если оно запланировано на зимнее время, а первое выполнение приходится на летнее время. Как справиться с этим?

Ответы на вопрос(1)

Ваш ответ на вопрос