Здравствуйте, Dwarffy, Вы писали:
D>Операция
>>> DateTime fromOleDate = DateTime.FromOADate(toOle); // OLE -> .NET (as it seems what happens on interop)
>>> TimeSpan diff = now — fromOleDate; // The difference is less than 1 millisecond.
D>На мой взгляд абсолютно неверна.
На данный момент меня больше волнует не то, что операция верна или нет. А то, что идентичность значений не соблюдается, хотя по сути выполняются операции над одним и тем же значением DateTime.
D>Если вы возьмете и разберете оба значения
D>D>double toOle = now.ToOADate();
D>DateTime fromOleDate = DateTime.FromOADate(toOle);
D>double dVal = fromOleDate.ToOADate();
D>
D>на состовляющие и сравните все поля, (ГГ.ММ.ДД ЧЧ.ММ.СС.ммм) то получите
D>два абсолютно идентичных времени.
Понятно, что double значения, полученные в .NET, будут одинаковыми (dVal == toOle). Проблема в том, что при передаче DATE значений COM -> .NET и обратно (без каких-то манипуляций со значениями) теряется точность/идентичность этих значений DATE. Они отличаются менее, чем на 1 милисекунду. Ессно, что в формате ГГ.ММ.ДД ЧЧ.ММ.СС.ммм они будут одинаковые, т.к. тут не учитыватся микросекунды.