datetime - VB6 中的 CDate 与 VB.NET 版本有何不同?

标签 datetime vb6 locale .net

我们最近将一些代码从 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/

相关文章:

c# - VB 6's MSXML2.XMLHTTP vs C#' s WebResponse

c++ - 如何为小数点分隔符和位数调整 std::stod(字符串加倍)

c# - 在 SQLite 中保存日期?

javascript toISOString() 忽略时区偏移量

python - 时区错误? 30分钟而不是1小时

c - 在 C 中使用舍入和千位分隔符格式化字符串的最有效方法是什么?

macos - 如何在 git log 中显示不同的语言字符?

sql-server - SQL Server 中的数字到日期时间 (yymmddhhmiss)

c# - 将 DateAdd 和 Format 代码从 VB6 转换为 C#

com - 如何从 ATL activex 控件向 VB6 返回错误字符串和错误代码?