Где 39938 - количество дней с 01.01.1900?
В этом случае используйте библиотечную функцию фреймворка DateTime.FromOADate()
.
Эта функция инкапсулирует все особенности и выполняет проверку границ.
Для его исторической ценности возможна реализация:
(C #)
public static DateTime FromExcelSerialDate(int SerialDate)
{
if (SerialDate > 59) SerialDate -= 1; //Excel/Lotus 2/29/1900 bug
return new DateTime(1899, 12, 31).AddDays(SerialDate);
}
VB
Public Shared Function FromExcelSerialDate(ByVal SerialDate As Integer) As DateTime
If SerialDate > 59 Then SerialDate -= 1 ''// Excel/Lotus 2/29/1900 bug
Return New DateTime(1899, 12, 31).AddDays(SerialDate)
End Function
[Update]:
Хм ... Быстрый тест показывает, что на самом деле два выходных. Не уверен, где разница.
Хорошо: проблема исправлена. Подробности смотрите в комментариях.