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
结论
- 在英国区域(系统默认使用英式日期格式)下,
CDate()会严格遵循系统区域设置的日期解析规则,也就是按照dd/mm/yy(日/月/年)的格式解析带分隔符的日期字符串。你的测试代码返回True,正好验证了这一点:解析后的early_date对应2020年6月9日,late_date对应2020年7月4日,后者确实晚于前者,所以比较结果为True。 - 如果要彻底规避区域设置带来的不确定性,推荐直接使用
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
相关产品推荐
相关产品推荐

