我有一个服务器应用程序正在处理不同时区的贷款。 服务器使用UTC运行,计划任务将在服务器@ 08:00本地时间启动进程,并选择该时区的贷款进行处理。服务器必须检查每笔贷款然后为某些贷款设置超时,该超时将在特定的当地时间(针对夏令时进行调整)触发,对于参数,例如第二天17:30,它将需要计算UTC等效时间然后锻炼小时数,分钟数和在达到结束之前需要经过的秒数。
我认为问题是将超时的业务需求转换为可配置的设置。此要求可能会在同一天的17:30或下一周的17:30更改。我需要一个解决方案(如果有的话),以应对在达到超时期间发生的夏令时变化。
答案 0 :(得分:1)
所以你只需要将特定时区的本地时间转换为UTC时间(适合超时等)?
使用TimeZoneInfo.ConvertTimeToUtc
,将本地日期/时间作为DateTime
传递,并传递相关的TimeZoneInfo
。
值得注意的是,DST更改可能不存在或可能发生两次。对于大多数时区来说,这种情况发生在当地时间早上,所以它可能不会影响您的业务规则 - 但值得注意。如果需要,您可以使用TimeZoneInfo.IsAmbiguousTime
和TimeZoneInfo.IsInvalidTime
检测到这一点 - 当然,您需要在检测到之后确定要做的事情。
答案 1 :(得分:1)
如果您知道当地时间,时区和所需日期,则可以使用TimeZoneInfo.ConvertTimeToUtc始终将其视为世界时。
TimeZoneInfo
是DST意识到的,所以你应该能够区分你通过这种方式获得的两个通用(UTC)时间(从当前服务器的本地时间,以及从目标贷款时区的计时器到期时间)到确定必要的计时器间隔。
答案 2 :(得分:0)
听起来很简单 - 使用DateTimeOffset。
答案 3 :(得分:0)
我建议不要转换为UTC。当DST开始/结束时不断变化,有时几乎没有注意到(Agentina曾将状态日改为12天后)。听起来你希望这个过程在当地时间17:30运行。
执行此操作的唯一方法是存储本地时间和时区。并注意“当地时间”不是该时区的时间,它只是一天中的固定时间。然后,当您需要计算下次运行时间时,将时区应用于您正在运行的日期的taime,并获取下一个事件的UTC时间。
特定事件 - 以UTC格式存储。重新活动 - 在当地时间和时间存储时区。
更多http://blogs.windwardreports.com/davidt/2009/11/what-every-developer-should-know-about-time.html