Re[4]: COM Interop: DateTime & OLE DATE
От: Nikolkos  
Дата: 27.04.09 08:39
Оценка:
Здравствуйте, 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 милисекунду. Ессно, что в формате ГГ.ММ.ДД ЧЧ.ММ.СС.ммм они будут одинаковые, т.к. тут не учитыватся микросекунды.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.