Как выполнять код в определенное время каждый день?
Я пытаюсь добавить в свою программу функцию, которая будет выполнять код каждый день после закрытия фьючерсных рынков в Чикаго. Это означает, что я хочу запускать код около 5:35 по восточному времени (4:35 по центральному времени, где расположены рынки). Это, конечно, будет переключаться между EST (UTC-5) и EST (UTC-4), когда наступает летнее время.
Я знаю, что есть много похожих вопросов, однако ни один из них не предлагает решения, которое я могу использовать. Похоже, что первичные предложения заключаются в использовании планировщика заданий или кварца, однако я не могу реализовать их в своей программе. Я думаю, что наиболее многообещающим решением было бы использование комбинацииTimeZoneInfo
DateTime
, а такжеTimeSpan
планировать таймер каждый день, который будет срабатывать в нужное время. В настоящее время у меня есть решение:
DateTime now = DateTime.Now;
DateTime currentDateTime = now.DateTime.Date;
DateTime expiryDateTime = currentDateTime
.AddHours(17)
.AddMinutes(35)
.AddDays(
now.DateTime.Hour >= 18 + utcOffset
|| (now.DateTime.Hour == 17 && now.DateTime.Minute >= 35) ? 1 : 0);
Timer timer = new Timer(
...,
null,
expiryDateTime - DateTime.Now,
...);
Однако я думаю, что это не справится, если мой код будет запущен в часовом поясе, отличном от восточного времени. Я'Я также обеспокоен тем, что это не будет вести себя должным образом в течение 23 или 25 часовых дней, которые происходят, когда часовой пояс переключается с EST на EDT и наоборот.
Есть ли лучший способ, чем то, что я сейчас делаю, для управления расписанием? Как я могу сделать этот код более устойчивым к обработке в любом часовом поясе, но всегда выполнять в одно и то же время по восточному времени?
РЕДАКТИРОВАТЬ: Как уже упоминалось выше,Планировщик заданий и Кварц не являются опциями, Кварц отсутствует, потому что я не могу включить сторонние библиотеки. Планировщик заданий отсутствует, потому что мне нужен доступ ко многим внутренним значениям из моей программы. Запуск другого приложения и предоставление этих значений этому приложению значительно усложняет ситуацию, чем я думаю.