我有一个服务器应用程序正在处理不同时区的贷款。 服务器使用 UTC 运行,计划任务将在本地时间 08:00 在服务器上启动一个进程,并选择该时区的贷款进行处理。服务器必须检查每笔贷款,然后为某些贷款设置一个超时,该超时将在特定本地时间触发(根据夏令时进行调整),对于第二天 17:30 的论证,它需要计算 UTC 等效时间然后执行在达到超时之前需要经过的小时数、分钟数和秒数。
我认为问题在于将超时的业务需求转化为可配置的设置。此要求可能更改为当天的 17:30 或下周的 17:30。我需要一个解决方案(如果有的话)来应对在达到超时期间发生的夏令时变化。
最佳答案
所以您只需要将特定时区的本地时间转换为 UTC 时间(适用于超时等)?
使用TimeZoneInfo.ConvertTimeToUtc
,将本地日期/时间作为 DateTime
和相关的 TimeZoneInfo
传递。
值得注意的是,在 DST 更改前后,某些本地时间可能不存在,或者可能出现两次。对于大多数时区,这发生在本地时间清晨,因此它可能不会影响您的业务规则 - 但值得一提。如果需要,您可以使用 TimeZoneInfo.IsAmbiguousTime
和 TimeZoneInfo.IsInvalidTime
检测到这一点 - 虽然您需要在检测到它后确定要做什么,当然。
关于C#时区计算问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4209337/