.Объем 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 ответа:
Вы случайно не в Великобритании? Хотя сейчас мы переходим на летнее и зимнее время, дата, указанная в коде, предшествует этому переходу, поэтому местное и 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.