У меня есть какое-то устаревшее приложение C ++, которое использует ADO и некоторые другие технологии COM & OLE.
Во время отладки я обнаружил странную вещь: в некоторой части моей программы есть переменная COleDateTime (класс C ++), в которой хранится e. g., значение 43279, отображает его на экране и сохраняет в базу данных SQL.
Так как в режиме отладки я не могу конвертировать с плавающей запятой в удобочитаемую дату и время, я использовал SQL-сервер и обнаружил странную вещь:
select convert(datetime, 43279)
производит '2018-06-30'
Я немного погуглил и нашел метод .NET
DateTime.FromOADate(43279)
, который выдает «2018-06-28», что является правильным и ожидаемым
Итак, это так неочевидно! и почему между OLE и SQL существует двухдневное различие в представлении даты и времени с плавающей точкой?