回答
尝试使用格式yyyy/mm/dd 而不是mm/dd/yyyy,以便日期字符串可以按字典顺序排序。
theSysDT: 06/21/2021, 15:22:35 -> 2021/06/21 15:22:35
CLParamDL: 09/21/2017, 17:02:00 -> 2017/09/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
附录:常见问题(关于此答案)
为什么这个帖子是正确的答案?我们不应该直接比较两个日期吗?
虽然看起来最初的问题是为了询问“如何比较两个日期”,但实际上并非如此。这是一个关于“如何canonicalize字符串格式的日期(因此可以使用普通的字符串比较运算符将其与其他值进行比较)”的问题。因此,这篇文章可以是被接受的正确答案。在这种情况下,直接显示比较两个日期的方法是没有意义的。
原代码解读:
一般来说,比较两个日期是通过直接比较两个日期来完成的,这是每个人都知道的(可能原始发布者也知道)。
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 来澄清问题,“为什么不能按预期比较日期-字符串”。代码清楚地显示了how date-strings are composed 和how comparison is made。由于所有元素都(也)紧凑地打包在一个 IF 子句中,因此尝试使用字符串比较来比较两个日期看起来像是一个尴尬的代码。但这是一个有目的地设计的正确代码。通过不带偏见地看到原始问题来正确把握整个画面对我们来说很重要。