2

我们最近将一些代码从 VB6 迁移到 Net 4。其中的代码是这一行:

If Now<CDate("28-08-2012") Then

我们的一位客户因程序错误联系了支持人员,结果表明他的计算机在此行上产生了错误,因为他的语言环境设置为英语(美国)。当它是 VB6 时,完全相同的代码并没有被炸毁。

那么,如何解释这种差异呢?

(我刚刚完成CDate从网络代码中删除所有函数并用 yyyy,mm,ddDateTime构造函数替换它)

4

1 回答 1

2

我认为这里的问题是(可悲的)VB6 中对 CDate 的过度热心解析例程。将语言环境设置为英语(美国),VB6(和 VBA 就这点而言)将为这两个表达式返回相同的日期:

CDate("12-13-2000")
CDate("13-12-2000")

他们都返回#12/13/2000#。显然,如果第一个数字不能转换为月份(例如 13),则假定它是一个月中的某一天(一个非常糟糕的假设)。

就这样。

于 2012-08-28T21:38:08.647 回答