You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA中CDate()函数默认返回何种日期格式?

VBA中CDate()函数的日期格式确认(英国区域)

我需要在VBA中将字符串转换为日期格式,步骤是先把类似"091220"的字符串解析成带分隔符的格式(比如"09/12/20"),再调用CDate()函数。但我没法确定CDate()返回的默认日期格式是dd/mm/yy还是mm/dd/yy——官方文档和相关资料都没明确说明,只提到格式取决于所在区域。我在英国,自己写的最小测试代码显示它返回dd/mm/yy,但在全项目应用前想确认这个结果的准确性。

我的测试代码如下(已修正原代码中的语法错误):

Public Sub date_test()
    Dim early_date As String ' 2020年6月9日
    Dim late_date As String ' 2020年7月4日
    
    early_date = "090620"
    late_date = "040720"
    
    early_date = Format(Left(early_date, 2) & "/" & Mid(early_date, 3, 2) & "/" & Right(early_date, 2), "dd/mm/yy")
    late_date = Format(Left(late_date, 2) & "/" & Mid(late_date, 3, 2) & "/" & Right(late_date, 2), "dd/mm/yy")
    
    MsgBox CDate(late_date) > CDate(early_date) ' 期望返回True,实际也确实返回True
End Sub

结论

  1. 在英国区域(系统默认使用英式日期格式)下,CDate()会严格遵循系统区域设置的日期解析规则,也就是按照dd/mm/yy(日/月/年)的格式解析带分隔符的日期字符串。你的测试代码返回True,正好验证了这一点:解析后的early_date对应2020年6月9日,late_date对应2020年7月4日,后者确实晚于前者,所以比较结果为True。
  2. 如果要彻底规避区域设置带来的不确定性,推荐直接使用DateSerial()函数构造日期,无需依赖字符串解析:
    ' 构造early_date对应的日期:2020年6月9日
    Dim earlyDate As Date
    earlyDate = DateSerial(20 & Right(early_date, 2), Mid(early_date, 3, 2), Left(early_date, 2))
    
    这种方式不管系统区域是什么,都能准确得到目标日期,稳定性更高。

内容的提问来源于stack exchange,提问作者Hamish Gibson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:39:18