我们最近将一些代码从VB6迁移到了Net 4.代码就是这一行:
If Now<CDate("28-08-2012") Then
我们的一位客户因程序错误而联系了支持人员,并且他的计算机出现了错误,因为他的语言环境设置为英语(美国)。完全相同的代码没有炸弹,而它是VB6。
那么,如何解释这种差异呢?
(我刚刚完成从网络代码中删除所有CDate
函数并将其替换为yyyy,mm,dd DateTime
构造函数)
答案 0 :(得分:2)
我认为这里的问题(遗憾的是)在VB6中对CDate过于热心的解析例程。将语言环境设置为英语(美国),VB6(以及VBA)将为这两个表达式返回相同的日期:
CDate("12-13-2000")
CDate("13-12-2000")
他们都返回#12/13/2000#。显然,如果第一个数字不能翻译成一个月(例如13),则假定它是一个月中的某一天(非常糟糕的假设)。
就是这样。