通常在比较硬编码的日期时我会使用字符串,但是如果在AS 400中没有设置日期,我的查询将带回#1/1 / 0001 12:00:00 AM#数据库。我只是在比较" 1/1/0001 12:00:00 AM"因为我虽然那是另一个会出错,但它似乎可以找到与另一个日期时间的比较。 在这个例子中#是什么意思。
If lastChg <> #1/1/0001 12:00:00 AM# Then
''do stuff
End If
答案 0 :(得分:3)
lastChg
可能被声明为Date
或DateTime
。 Date
只是System.DateTime
的VB别名。您无法将Date
值与String
进行比较,但可以将Date
常量与Date
变量进行比较。 #1/1/0001 12:00:00 AM#
是所谓的日期文字,类型为Date
。它是日期常量的文本表示。
你可以写
Const EmptyDate AS Date = #1/1/0001 12:00:00 AM#
If lastChg <> EmptyDate Then
''do stuff
End If
在任何情况下,请确保如果lastChg
属于Date
类型,则将其与日期文字(#
)进行比较,但如果String
为"
字符串文字(带{{1}})
答案 1 :(得分:1)
大多数语言都要求您使用字符串作为日期文字,然后编译器会将字符串解析为日期对象(在编译时,当然......它永远不会是内存中的字符串)。 VB实际上有日期文字的特殊语法。
大多数情况下,特殊语法无关紧要,正如其他语言所示,编译器通常会知道字符串与日期的含义。此示例可以很好地转换为使用string-ish日期文字的任何强类型语言,因为编译器将看到DateTime变量并知道如何对文字进行编码:
If "2017-07-25" <> MyDateTimeVariable Then ...
但是在某些情况下VB的语法很好。其中之一是动态对象。假设您有一个返回dynamic
的方法(COM会执行此操作,或者某些非托管库会强制执行此操作)。在另一种语言中,您可能拥有与此大致相同的代码:
If "2017-07-25" = MyDynamicMethodThatIKnowReturnsADate() Then '...
对日期文字使用字符串表示法,编译器可能只是在这里使用字符串文字。您将被迫转换方法结果或构造DateTime对象以获得良好的代码。但现在看看这个:
If #2017-07-25# = MyDynamicMethodThatIKnowReturnsADate() Then '...
现在编译器肯定会给你一个该文字的DateTime对象,因为你知道动态方法真的会给你一个DateTime,比较将按预期工作。吊杆。
另一个例子是数据库结果,它通常从ADO.Net返回,只输入Object
。拥有一个真实的DateTime文字,允许运行时知道在与数据库列进行比较时该做什么。
答案 2 :(得分:0)
就像“for string but # is for date。
Dim date1 As Date = #5/1/2008 8:30:52AM#