在vb.net中有一个被#符号包围的日期他们做了什么?

时间:2017-07-25 17:15:19

标签: vb.net datetime symbols

通常在比较硬编码的日期时我会使用字符串,但是如果在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

3 个答案:

答案 0 :(得分:3)

lastChg可能被声明为DateDateTimeDate只是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#