.Объем 2.0 преобразование типа datetime в формате 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() , а время в Великобритании должно было привести к "24/03/2009 00: 00: 00" as Мирового.

Однако, похоже, что указание DateTimeKind таким образом делает ToUniversalTime или ToLocalTime неспособными произвести какие-либо вычисления.

2 2
utc

2 ответа:

Вы случайно не в Великобритании? Хотя сейчас мы переходим на летнее и зимнее время, дата, указанная в коде, предшествует этому переходу, поэтому местное и UTC время в Великобритании одинаковы. Если вы укажете апрель в качестве месяца, то увидите разницу в один час.

Ура Дэвиду М. Я еще не завтракал. Действительно, когда я повторяю тест с датами, которые превышают порог летнего времени 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.