.NET 2.0 DateTime UTC преобразование - PullRequest
2 голосов
/ 02 апреля 2009

Почему функция 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, приведет к соответствующему вычислению TimeZone при вызове ToUniversalTime () и время в Великобритании должно привело к «24/03/2009 00:00:00» как UTC.

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

Ответы [ 2 ]

5 голосов
/ 02 апреля 2009

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

0 голосов
/ 02 апреля 2009

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

...