我们最近将一些代码从 VB6 迁移到 Net 4。代码中有这一行:
If Now<CDate("28-08-2012") Then
我们的一位客户因程序错误联系了支持人员,结果发现他的计算机在该行上产生了错误,因为他将区域设置设置为英语(美国)。完全相同的代码在 VB6 时不会爆炸。
那么,如何解释这种差异呢?
(我刚刚从网络代码中删除所有 CDate
函数,并将其替换为 yyyy,mm,dd DateTime
构造函数)
最佳答案
我认为这里的问题(遗憾的是)是 VB6 中 CDate 的过度热心解析例程。当语言环境设置为英语(美国)时,VB6(以及 VBA)将为这两个表达式返回相同的日期:
CDate("12-13-2000")
CDate("13-12-2000")
它们都返回#12/13/2000#。显然,如果第一个数字无法转换为月份(例如 13),则假定它是该月中的某一天(一个非常糟糕的假设)。
就这样了。
关于datetime - VB6 中的 CDate 与 VB.NET 版本有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165835/