【问题标题】:Changing the timezone of my application for testing [duplicate]更改我的测试应用程序的时区 [重复]
【发布时间】:2016-05-19 09:13:37
【问题描述】:

我目前正在从事一个项目,该项目有很多时间安排并根据这些时间表执行任务。

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

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

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

【问题讨论】:

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

标签: c# .net timezone


【解决方案1】:

有几点:

  • 服务器端应用程序永远不应依赖于本地计算机的时区。这意味着您永远不应调用 DateTime.NowTimeZoneInfo.LocalDateTime.ToLocalTimeDateTime.ToUniversalTime 或任何其他使用机器本地时区的方法或属性。如果您注意到时区不同时应用程序的行为发生了变化,则说明您的应用程序代码不正确,应予以修复。

  • 正确调度不能仅根据 UTC 来完成。您需要考虑正在安排的事件的时区(而不是机器的时区)。 (More on this here) 这最好在应用层完成,因此您可以在代码中为不同的时区创建单元测试。您不会通过更改机器的时区或其他一些主时区设置来进行测试。

    例如,假设我在美国太平洋时间每天上午 10:00 开会。我无法根据 UTC 安排此时间,因为等效的 UTC 时间将在 18:00 和 17:00 之间波动,具体取决于会议具体发生时太平洋时区的夏令时是否有效。同样,我不能使用服务器的时区,因为它可能是 UTC,或者它可能是为澳大利亚、欧洲、南美洲或任何其他时区和夏令时规则完全不同的地方设置的。事件是太平洋时间,时钟是UTC,两者之间的转换必须在应用层完成,事件必须安排在太平洋时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2014-05-25
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2016-07-09
    相关资源
    最近更新 更多