我目前正在处理一个项目,该项目有很多时间根据这些时间表安排和执行任务。
我只是想知道当它们都在我的电脑上运行时,是否有一种更简单的方法可以在与我的服务器不同的时区测试我的应用程序。
Id 不希望更改区域设置中的时区,而是希望以某种方式更改该应用程序的上下文。
数据库将所有内容存储为 UTC,但应用程序会以本地时间向用户显示此内容。但我在 UTC 时区,所以对我来说是一样的。
有几件事:
-
服务器端应用程序永远不应依赖于本地计算机的时区。 这意味着你永远不应该调用
DateTime.Now
、TimeZoneInfo.Local
、DateTime.ToLocalTime
、DateTime.ToUniversalTime
或任何其他使用计算机本地时区的方法或属性。 如果您注意到在时区不同时应用程序的行为发生了变化,则您的应用程序代码不正确,应予以修复。 -
仅根据 UTC 无法正确调度。 您需要考虑正在安排的事件的时区(而不是计算机的时区(。 (更多关于这个 这里(这最好在应用程序层完成,因此您可以在代码中为不同的时区创建单元测试。 您不会通过更改计算机的时区或其他一些主时区设置来进行测试。
例如,假设我是否在美国太平洋时间每天上午 10:00 开会。 我无法根据 UTC 安排此时间,因为等效的 UTC 时间将在 18:00 和 17:00 之间波动,具体取决于太平洋时区的夏令时是否在会议的具体发生时生效。 同样,我无法使用服务器的时区,因为它可能是 UTC,也可能设置为澳大利亚、欧洲、南美或时区和夏令时规则完全不同的任何其他地方。 事件采用太平洋时间,时钟采用UTC,两者之间的转换必须在应用层完成,事件必须安排在太平洋时间。