将CDate(长)从VB6移植到C#

时间:2009-12-18 18:04:03

标签: c# vb6 vb6-migration

我的任务是将旧的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 个答案:

答案 0 :(得分:5)

尝试使用

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

代替。

Here是关于CDate(长篇)的一小段文档。它不是来自MS,也不是关于VB6,但由于CDate是迄今为止我见过的所有VBA实现的一部分,我怀疑它不会产生很大的不同。

答案 1 :(得分:0)

旧的VB6长数据类型变为System.Int32,或者只是在C#中的int

c#中的long是System.Int64

double是System.double,它是64位浮点