Портирование CDate (long) с VB6 на C # - PullRequest
4 голосов
/ 18 декабря 2009

Мне было поручено преобразовать старую программу VB6 в C #. Одна из проблем, с которой у меня возникли проблемы при переносе, - это вычисление даты рождения из поля, которое было прочитано из двоичного файла:

.BirthDate = CDate((CLng(recPatient.birthDateByte2) * 256) +
                         (recPatient.birthDateByte1 + 366))

Единственная удаленная функция, которую я смог найти:

DateTime BirthDate = DateTime.ToDateTime((long)recPatient.birthDateByte2) * 256) 
                                       + (recPatient.birthDateByte1 + 366));

Однако ToDateTime(long) просто возвращает InvalidCastException.

Теперь я могу построить строку вручную, но не могу найти документацию в VB6 CDate(long).

Что я делаю не так?

Ответы [ 2 ]

5 голосов
/ 18 декабря 2009

Попробуйте использовать

  DateTime.FromOADate((double)recPatient.birthDateByte2 * 256 
                     + recPatient.birthDateByte1 + 366)

вместо.

Здесь представляет собой небольшую часть документации о CDate (long). Это не от MS и не от VB6, но, поскольку CDate является частью всех реализаций VBA, которые я видел до сих пор, я подозреваю, что это не будет иметь большого значения.

0 голосов
/ 19 декабря 2009

Старый тип данных VB6 long становится System.Int32 или просто int в C #

долго в c # стоит System.Int64

double - это System.double, что является 64-битной плавающей точкой

...