如何在winforms中为整个应用程序设置通用时区

时间:2013-08-13 07:02:04

标签: c# winforms timezone

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

因此,即使时区发生变化,应用程序也应按照通用时区显示时间。

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

3 个答案:

答案 0 :(得分:2)

不幸的是你不能(你可以在下面的帖子中查看Jon Skeet的回复:Setting/Changing an .NET application's TimeZone)。 所以你有两个选择:

  1. 每个人都使用DateTime.ToUniversalTimeMSDN description
  2. 创建自己的代表DateTime的类,然后使用它代替
  3. 你可以再使用一招。您可以使用例如Microsoft Fakes模拟DateTime。在这里查看更多:Using shims to isolate your application from other assemblies for unit testing

答案 1 :(得分:1)

您最好的选择是创建一个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;

答案 2 :(得分:-1)

  

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

使用以下代码:

TimeZone zone =  TimeZone.CurrentTimeZone;
DateTime universal = zone.ToUniversalTime(DateTime.Now);