Visual Basic 6.0 IF 语句不会通过,只会继续转到 ELSE 语句

Visual Basic 6.0 IF statement won't go through, only keeps going to ELSE statement

我正在尝试使用 IF 语句比较 2 个日期,但似乎 visual basic 不会比较它们,因为我总是以我的 Else 上的 msgbox 结束,这是我的代码:

If Format(theSysDT, "mm/dd/yyyy HH:MM:SS") > Format(CLParamDL, "mm/dd/yyyy HH:MM:SS") Then
        MsgBox ("theSysDt is greater than CLParamDL")
Else
        MsgBox ("error error")
End If

theSysDT:2021 年 6 月 21 日,15:22:35

CLParamDL:2017 年 9 月 21 日,17:02:00

不知道为什么不进入if语句

回答

尝试使用格式 yyyy/mm/dd 而不是 mm/dd/yyyy 以便日期字符串可以按字典顺序排序。

theSysDT:06/21/2021,15:22:35 -> 2021/06/21 15:22:35

CLParamDL:2017 年 9 月 21 日,17:02:00 -> 2017 年 9 月 21 日 17:02:00

If Format(theSysDT, "yyyy/mm/dd HH:MM:SS") > Format(CLParamDL, "yyyy/mm/dd HH:MM:SS") Then
    MsgBox ("theSysDt is greater than CLParamDL")
Else
    MsgBox ("error error")
End If

附录:常见问题(关于此答案)

为什么这个post是正确答案?我们不应该直接比较两个日期吗?

虽然看起来原题是问“如何比较两个日期”,但实际上并非如此。这是一个关于“如何 canonicalize 字符串格式的日期(因此可以使用普通字符串比较运算符将其与其他值进行比较)”的问题。因此这个 post 可以是被接受的正确答案。在这种情况下,显示比较两个日期的直接方法没有任何意义。

原码解读:

一般来说比较两个日期都是通过直接比较两个日期来完成的,这个大家都知道(估计原poster也知道)

If theSysDT > CLParamDL Then
    MsgBox ("theSysDt is greater than CLParamDL")
Else
    MsgBox ("error error")
End If

但是原来的代码不是这样写的,

If Format(theSysDT, "mm/dd/yyyy HH:MM:SS") > Format(CLParamDL, "mm/dd/yyyy HH:MM:SS") Then
    MsgBox ("theSysDt is greater than CLParamDL")
Else
    MsgBox ("error error")
End If

因为是minimal test code澄清问题,“为什么date-strings不能按预期进行比较”。代码清楚地显示了 how date-strings are composedhow comparison is made。由于所有元素都(太)紧凑地打包在单个 IF 子句中,因此尝试使用字符串比较来比较两个日期看起来像是一段笨拙的代码。但这是一个正确的代码,是有意设计的。不带偏见地看原题,正确把握全貌对我们很重要。

假设 SysDT 和 CLParamDL 都是 Date 类型,那么只比较它们而不尝试将它们转换为字符串:

If theSysDT > CLParamDL Then
    MsgBox ("theSysDt is greater than CLParamDL")
Else
    MsgBox ("error error")
End If