我正试图在我的.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框架中为此问题获得可靠的解决方案?
答案 0 :(得分:9)
您需要修补系统。在我的系统(安装了所有更新的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以适应俄罗斯DST法律的变化,你显然没有。
* Dump()是LINQPad提供的扩展方法。相当于Console.WriteLine(&lt; ...&gt; .ToString())
答案 1 :(得分:2)
我认为这个问题将通过微软的补丁解决。他们会定期更新时区。
据我所知,你所能做的只是+1时间。
当然,你也可以走一些网络时间服务的路径并从中请求时间。