【问题标题】:find current moscow time using c#使用 c# 查找当前莫斯科时间
【发布时间】:2014-01-04 23:03:32
【问题描述】:

我正在尝试在我的 .NET 应用程序中获取本地莫斯科时间。

这是我走了多远:

private static Dictionary<TimeZoneEnum, string> timeZoneDict = new Dictionary<TimeZoneEnum, string>()
{
    {TimeZoneEnum.RussiaStandardTime, "Russian Standard Time"}
};

public static DateTime GetDateTimeNowForTimeZone(TimeZoneEnum timezone)
{
    DateTime result = TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById(timeZoneDict[timezone]));
    return result;
}

方法 GetDateTimeNowForTimeZone 给了我 GMT+3 时间,但现在在俄罗斯有 GMT+4 时间。 有没有办法在 .net 框架中为这个问题获得强大的解决方案?

【问题讨论】:

  • 根据这个(msdn.microsoft.com/en-us/library/…)是正确的
  • 也许你想检查 IsDaylightSavingTime 并相应地增加一小时 msdn.microsoft.com/en-us/library/bb460642(v=vs.110).aspx
  • 直奔源头。我会找到一个不会在时区之间翻转的更强大的计时系统。
  • 刚看了一下,好像俄罗斯最近放弃了夏令时,这可能是错误的原因。
  • :D 好吧,我支持你。无论如何,大自然最近正在变得疯狂,所以我认为这是一个有效的观点。

标签: c# .net timezone


【解决方案1】:

我认为这个问题将通过微软的补丁得到解决。他们会定期更新时区。

据我所知,目前你所能做的就是 +1 时间。

当然,你也可以沿着一些网络时间服务的路径向它请求时间。

【讨论】:

  • .net 中有一个错误:据此:msdn.microsoft.com/en-us/library/… 莫斯科时间是 GMT + 3 但实际上是 + 4 en.wikipedia.org/wiki/Moscow_Time
  • 这不是错误,只是页面没有更新 - 俄罗斯标准时间现在在 .NET 框架中具有 GMT+4。但是,存在一个错误,即在此更改后旧日期转换不正确
  • 我不会称之为错误。该指数领先于框架/操作系统更新。我实际上是在我们的系统上进行一些时区转换,发现在一年的时间里他们增加了两打时区。现在有 .15 .30 .45 和偏移量。我现在说是因为我最近偶然发现了这一点,请注意,这可能已经有一段时间了:)
【解决方案2】:

您需要修补系统。在我的系统上(安装了所有更新的 Windows 7)它给出了正确的时间:

DateTime.UtcNow.Dump();
TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time")).Dump();

输出:

17/12/2013 09:11:08
17/12/2013 13:11:08

微软不久前发布了an update 以适应俄罗斯夏令时法的变化,你显然没有。

*Dump() 是 LINQPad 提供的扩展方法。等价于 Console.WriteLine(<...>.ToString())

【讨论】:

  • 现在我想,如果应用程序在过时的操作系统上运行,这将无济于事。
  • 好吧,问题是,这个操作系统无论如何都会有时间问题。如果你的程序时钟显示为 14:00,而 windows 的系统时钟显示为 13:00,会有什么帮助?最好只显示系统本地时间的所有内容 - 如果用户习惯了 1 小时的休息时间,他不会注意到。对于服务器/客户端交互,无论如何都是 UTC。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多