GBl*_*ney 1 c# time timezone datetime
我正在尝试为我的程序添加一个功能,该功能将在芝加哥期货市场关闭后每天执行代码.这意味着我想在美国东部时间5点35分左右(市场所在的中部时间中午4点35分)运行代码.当然,当夏令时发生时,这将在EST(UTC -5)和EST(UTC -4)之间来回切换.
我知道有很多类似的问题,但是它们似乎都没有提供我可以使用的解决方案.主要的建议似乎是使用Task Scheduler或Quartz,但是,我无法在我的程序中实现这些.我认为,最有前途的解决办法是使用的组合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,
...);
Run Code Online (Sandbox Code Playgroud)
但是,如果我的代码在东部时间以外的时区运行,我认为这将会崩溃.我还担心,当时区从EST切换到EDT时,这种情况在23或25小时内表现不正常,反之亦然.
有没有比我目前正在做的更好的方式来处理调度?如何使这段代码更加健壮,以便在任何时区运行,但总是在东部时间同时执行?
编辑:如上所述,任务计划程序和Quartz不是选项.Quartz已经出局,因为我无法包含第三方库.任务计划程序已经出局,因为我需要访问程序中的许多内部值.启动另一个应用程序并将这些值暴露给该应用程序会增加比我认为的更复杂的复杂性.
您错过了Windows任务计划程序的要点.您没有在您的应用程序中实现它.您编写应用程序,然后使用任务计划程序在每天的设定时间运行它.
不幸的是,为了回应您关于日程安排和应用程序性质的说明,您强调需要重新考虑您的应用程序.构建一个必须一直运行并且不断添加功能的整体应用程序并不是一个好主意.
相反,为什么不重新考虑应用程序的结构.您可以拥有核心功能,它需要一直运行,作为服务运行.然后,其他组件可以通过例如休息接口与其通信.然后可以停止启动应用程序的用户界面方面,而不必担心影响服务,无论如何都可以继续运行.此外,添加额外的功能(例如在一天的特定时间执行特定tsaks的预定应用程序)变得更加容易.
| 归档时间: |
|
| 查看次数: |
4399 次 |
| 最近记录: |