Разница в 2 дня: почему выберите convert (datetime, 43279) = '2018-06-30' и DateTime.FromOADate (43279) = '2018-06-28'? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть какое-то устаревшее приложение 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 существует двухдневное различие в представлении даты и времени с плавающей точкой?

...