C# 更改我的测试应用程序的时区

C# 更改我的测试应用程序的时区,c#,.net,timezone,C#,.net,Timezone,我现在正在做一个项目,这个项目有很多时间安排,并根据这些安排执行任务 我只是想知道,当我的应用程序和服务器都在我的电脑上运行时,是否有更简单的方法在不同的时区测试我的应用程序 我不希望更改区域设置中的时区,而是希望以某种方式更改该应用程序的上下文 数据库将所有内容存储为UTC,但应用程序会在用户的本地时间将其显示给用户。但是我在UTC时区,所以他们对我来说是一样的 有几件事: 服务器端应用程序不应依赖于本地计算机的时区。这意味着您永远不应该调用DateTime.Now、TimeZoneInfo.

我现在正在做一个项目,这个项目有很多时间安排,并根据这些安排执行任务

我只是想知道,当我的应用程序和服务器都在我的电脑上运行时,是否有更简单的方法在不同的时区测试我的应用程序

我不希望更改区域设置中的时区,而是希望以某种方式更改该应用程序的上下文

数据库将所有内容存储为UTC,但应用程序会在用户的本地时间将其显示给用户。但是我在UTC时区,所以他们对我来说是一样的

有几件事:

服务器端应用程序不应依赖于本地计算机的时区。这意味着您永远不应该调用DateTime.Now、TimeZoneInfo.Local、DateTime.ToLocalTime、DateTime.ToUniversalTime或使用机器本地时区的任何其他方法或属性。当时区不同时,如果您注意到应用程序的行为发生了变化,那么您的应用程序代码是不正确的,应该进行修复

仅根据UTC无法正确安排时间。你需要考虑事件的时区,而不是机器的时区。这最好在应用层完成,因此您可以在代码中为不同的时区创建单元测试。您不需要通过更改机器的时区或其他主时区设置来进行测试

例如,如果我在美国太平洋时间上午10:00有一个会议,请考虑一下。我不能以UTC为单位安排时间,因为等效UTC时间将在18:00和17:00之间波动,这取决于会议具体发生时太平洋时区是否实行夏令时。同样,我不能使用服务器的时区,因为它可能是UTC,也可能是为澳大利亚、欧洲、南美或时区和夏令时规则完全不同的任何其他地方设置的。事件发生在太平洋时间,时钟发生在UTC,两者之间的转换必须在应用程序层完成,事件必须安排在太平洋时间

有几件事:

服务器端应用程序不应依赖于本地计算机的时区。这意味着您永远不应该调用DateTime.Now、TimeZoneInfo.Local、DateTime.ToLocalTime、DateTime.ToUniversalTime或使用机器本地时区的任何其他方法或属性。当时区不同时,如果您注意到应用程序的行为发生了变化,那么您的应用程序代码是不正确的,应该进行修复

仅根据UTC无法正确安排时间。你需要考虑事件的时区,而不是机器的时区。这最好在应用层完成,因此您可以在代码中为不同的时区创建单元测试。您不需要通过更改机器的时区或其他主时区设置来进行测试

例如,如果我在美国太平洋时间上午10:00有一个会议,请考虑一下。我不能以UTC为单位安排时间,因为等效UTC时间将在18:00和17:00之间波动,这取决于会议具体发生时太平洋时区是否实行夏令时。同样,我不能使用服务器的时区,因为它可能是UTC,也可能是为澳大利亚、欧洲、南美或时区和夏令时规则完全不同的任何其他地方设置的。事件发生在太平洋时间,时钟发生在UTC,两者之间的转换必须在应用程序层完成,事件必须安排在太平洋时间


您应该设置一个虚拟机来测试这种行为。一台计算机上不可能有两个时区。1没有UTC时区。您今天可能在UTC+0,但在夏季,您将在UTC+1。2不要使用DateTime,请使用DateTimeOffset,这样至少您的代码不必猜测偏移量。如果你真的关心时区,那么使用nodatime你应该设置一个虚拟机来测试这种行为。一台计算机上不可能有两个时区。1没有UTC时区。您今天可能在UTC+0,但在夏季,您将在UTC+1。2不要使用DateTime,请使用DateTimeOffset,这样至少您的代码不必猜测偏移量。如果你真的关心时区,就用NodaTime