Я предположил, что при вычитании 2-х дней структура проверит их часовой пояс и сделает соответствующие преобразования.Вычитание UTC и не-UTC DateTime в C#
Я тестировал его с этим кодом:
Console.WriteLine(DateTime.Now.ToUniversalTime() - DateTime.UtcNow.ToUniversalTime());
Console.WriteLine(DateTime.Now.ToUniversalTime() - DateTime.UtcNow);
Console.WriteLine(DateTime.Now - DateTime.UtcNow);
Выход:
-00:00:00.0020002
-00:00:00.0020001
01:59:59.9989999
К моему удивлению, DateTime.Now - DateTime.UtcNow
не делает соответствующее преобразование автоматически. В то же время DateTime.UtcNow
совпадает с DateTime.UtcNow.ToUniversalTime()
, поэтому, очевидно, есть внутренний флаг, указывающий часовой пояс.
Правильно ли, что эта структура не выполняет автоматическое изменение часового пояса автоматически, даже если информация уже присутствует? Если это так, применяется ToUniversalTime()
безопасно как для времени UTC, так и для не-UTC, т. Е. Дата и время UTC уже не будут неправильно исправлены ToUniversalTime()
?
Различные результаты в моно: http://ideone.com/AfFUpV – zerkms
@zerkms Я на VS2015, я не знаю, имеет ли это значение. Вы можете проверить идеон с помощью Visual Studio? Я лично не использовал идеон, поэтому не могу понять, как это сделать. – sashoalm
В DateTime отсутствует часовой пояс, в котором хранится дата и время. Поэтому он не знает, в какой временной зоне есть DateTime. –