System.DateTime.Now.ToLocalTime没有返回本地时间



我得到一个

"提供的DateTime表示一个无效的时间。例如,当时钟向前调整,跳过周期内的任何时间无效"

当我尝试将时间转换为UTC时,

消息。遇到这个问题的客户是在法国,但这个问题似乎是在美国实行夏令时时开始的。我看到代码中有一个地方使用了东部时区。我想它一定是想用东部标准时间。

无论如何,我试着模仿他们的场景,在将我的区域设置为法语/法国和时区设置为阿姆斯特丹,柏林等后调用相同的方法。我的测试代码是:

DateTime eventDate = System.DateTime.Now.ToLocalTime();

不合理的是它返回的是美国东部夏令时的日期时间,而不是我的系统时钟显示的时间。BIOS时钟设置为EDT还是什么?我的意图是将eventDate传递给我的法国客户端似乎工作不正确的方法。

你所写的绝对是不可能的。

你说你得到错误:

"提供的DateTime表示一个无效的时间。例如,当时钟向前调整时,跳过的时间段内的任何时间都是无效的"

这只能发生在将本地时间转换为UTC - 时,而不能反过来

也只能在TimeZoneInfo上使用转换方法时发生。例如,下面的代码将使用该消息创建一个异常:

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime dt = new DateTime(2014, 3, 9, 2, 30, 0);
DateTime utc = TimeZoneInfo.ConvertTimeToUtc(dt, tz);

你可能也认为如果你的计算机时区设置为"东部标准时间",你也会得到同样的异常,并运行以下代码:

DateTime dt = new DateTime(2014, 3, 9, 2, 30, 0);
DateTime utc = dt.ToUniversalTime();

但是,此方法将静默地允许无效输入,而不会抛出异常。它只会向前调整一个小时,就好像你过了3:30而不是2:30。

此外,正如其他人所指出的,DateTime.Now已经是局部的,并且具有Local类。所以调用ToLocalTime不会做任何事情。如果你想调用ToUniversalTime,那么就使用DateTime.UtcNow

您可能还对dst标记wiki和时区标记wiki感兴趣,它们包含相关的详细信息。

我添加了TimeZoneInfo.ClearCachedData();在我调用Now之前,它现在返回正确的时间。

相关内容

  • 没有找到相关文章

最新更新