Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我们最近将一些代码从 VB6 迁移到 Net 4。其中的代码是这一行:
If Now<CDate("28-08-2012") Then
我们的一位客户因程序错误联系了支持人员,结果表明他的计算机在此行上产生了错误,因为他的语言环境设置为英语(美国)。当它是 VB6 时,完全相同的代码并没有被炸毁。
那么,如何解释这种差异呢?
(我刚刚完成CDate从网络代码中删除所有函数并用 yyyy,mm,ddDateTime构造函数替换它)
CDate
DateTime
我认为这里的问题是(可悲的)VB6 中对 CDate 的过度热心解析例程。将语言环境设置为英语(美国),VB6(和 VBA 就这点而言)将为这两个表达式返回相同的日期:
CDate("12-13-2000") CDate("13-12-2000")
他们都返回#12/13/2000#。显然,如果第一个数字不能转换为月份(例如 13),则假定它是一个月中的某一天(一个非常糟糕的假设)。
就这样。