8

如何为整个应用程序设置通用时区。

因此,即使更改了时区,应用程序也应该按照通用时区显示时间。

那么是否可以设置整个应用程序时区?

4

3 回答 3

2

不幸的是,您不能(您可以在以下线程中查看 Jon Skeet 的响应:设置/更改 .NET 应用程序的 TimeZone)。所以你有两个选择:

  1. 随处使用DateTime.ToUniversalTimeMSDN 描述
  2. 创建您自己的代表DateTime并使用它的类
  3. 你可以再使用一个技巧。您可以使用例如 Microsoft Fakes 来模拟 DateTime。在此处查看更多信息:使用 shims 将您的应用程序与其他程序集隔离以进行单元测试
于 2013-08-13T07:06:02.260 回答
2

您最好的选择是创建一个localization类,它将在您喜欢的时区返回 DateTime。在你的应用程序中,你应该使用这个类,而不是DateTime.Now在你想显示日期和时间的时候:

class Localization
{

    public Localization(string timeZoneId = "UTC")
    {
        TimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
    }

    public virtual TimeZoneInfo TimeZone { get; set; }

    public DateTime Now
    {
        get
        {
            return     TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZone)
        }
    }
}

如果您的应用程序中只需要一个静态时区,您可以将上述类设为单例。

var locale = new Localization(); // default is UTC, provide yours.
var now = locale.Now;
于 2013-08-13T07:16:14.677 回答
-1

如何为整个应用程序设置通用时区?

使用以下代码:

TimeZone zone =  TimeZone.CurrentTimeZone;
DateTime universal = zone.ToUniversalTime(DateTime.Now);
于 2013-08-13T07:04:14.337 回答