.NET 2.0 DateTime UTC转换

时间:2009-04-02 11:54:18

标签: datetime c#-2.0 utc

为什么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()值进行调整,其中DateTime指定为Local会在调用ToUniversalTime()时导致相应的TimeZone计算,并且英国的时间应该有结果 “24/03/2009 00:00:00”为UTC。

然而,似乎以这种方式指定DateTimeKind会导致ToUniversalTime或ToLocalTime无法进行任何计算。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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属性输出。