2

为什么 ToUniversalTime 函数在这里没有作用;

DateTime dt = new DateTime(2009,3,24,1,0,0,DateTimeKind.Local);
dt = dt.ToUniversalTime(); // convert BST to UTC ?
dt.ToString();

“24/03/2009 01:00:00”……错了?

是相同的..

DateTime dt = new DateTime(2009,3,24,1,0,0,DateTimeKind.Utc);
dt = dt.ToUniversalTime(); // nothing to do, already utc
dt.ToString();

“24/03/2009 01:00:00” ...正确。

我希望对第一个示例的 ToString() 值进行调整,其中指定为 Local 的 DateTime 在调用 ToUniversalTime() 时会导致相应的 TimeZone 计算,而英国的时间应该会导致“ 24/03/2009 00:00:00”为 UTC。

但是,以这种方式指定 DateTimeKind 似乎会使 ToUniversalTime 或 ToLocalTime 无法进行任何计算。

4

2 回答 2

5

你有机会在英国吗?虽然我们现在处于夏令时,但您在代码中指定的日期是在此切换之前,因此英国的本地时间和 UTC 时间是相同的。如果您将四月指定为月份,那么您将看到一小时的差异。

于 2009-04-02T12:02:19.620 回答
0

干杯大卫 M. 没有吃我的早餐。事实上,当我用超过 BST 夏令时阈值的日期重复测试时,行为当然是正确的。

 DateTime dt = new DateTime(2009,4,24,1,0,0,DateTimeKind.Local); 
 dt = dt.ToUniversalTime(); // convert BST to UTC ? 
 dt.ToString(); // "24/04/2009 00:00:00" ... correct 

为了确认,该ToString()方法似乎基于 Kind 属性进行输出。

于 2009-04-02T12:13:38.767 回答