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

本文关键字:应用程序 设置 全局 时区 winforms | 更新日期: 2023-09-27 18:27:37

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

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

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

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

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

  1. 每个人都使用DateTime.ToUniversalTime(MSDN说明)
  2. 创建表示DateTime的自己的类并使用它
  3. 你可以再使用一个技巧。您可以使用例如Microsoft Fakes来模拟DateTime。点击此处查看更多信息:使用垫片将您的应用程序与其他组件隔离以进行单元测试

您的最佳选择是创建一个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)
        }
    }
}

如果您只想在应用程序中有一个静态时区,那么您可以创建类以上的singleton。

var locale = new Localization(); // default is UTC, provide yours.
var now = locale.Now;

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

使用以下代码:

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