【问题标题】:How to set univeral timezone for entire application in winforms [closed]如何在winforms中为整个应用程序设置通用时区[关闭]
【发布时间】:2013-08-14 16:30:41
【问题描述】:

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

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

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

【问题讨论】:

  • 现在问有点晚了,但请告诉我我的问题如何不清楚。 Garath 完美回答了我的问题。

标签: c# winforms timezone


【解决方案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】:

    很遗憾,您不能(您可以查看 Jon Skeet 在以下线程中的回复:Setting/Changing an .NET application's TimeZone)。 所以你有两个选择:

    1. 每个人都使用DateTime.ToUniversalTime (MSDN description)
    2. 创建您自己的代表DateTime 的类并改用它
    3. 您可以再使用一个技巧。您可以使用例如 Microsoft Fakes 来模拟 DateTime。在这里查看更多:Using shims to isolate your application from other assemblies for unit testing

    【讨论】:

    • 你能继承 DateTime 吗?它是结构体
    • @SriramSakthivel 你是对的。我更新了我的回复。
    • DateTime.UtcNow 好得多好吗?因为DateTime.Now内部使用DateTime.UtcNow计算当地时间
    【解决方案3】:

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

    使用以下代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 2012-04-03
      • 2010-11-22
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多