在vb.net中有一个包含#号的日期他们做什么?
通常当比较硬编码的日期时,我会使用一个字符串,但如果未在AS 400数据库中设置日期,则我的查询将带回#1/1/0001 12:00:00 AM#。我厌倦了比较“1/1/0001 12:00:00 AM”,因为虽然那是另一个错误,但它似乎可以找到与另一个日期时间的比较。 在这种情况下#的含义是什么。在vb.net中有一个包含#号的日期他们做什么?
If lastChg <> #1/1/0001 12:00:00 AM# Then
''do stuff
End If
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
为字符串字面(带"
)
大多数语言都要求您为日期文字使用字符串,然后编译器会将该字符串解析为日期对象(在编译时,当然......它从来不是内存中的字符串)。 VB实际上有日期文字的特殊语法。
大多数情况下,特殊语法并不重要,正如其他语言所示,其中编译器通常会知道您对字符串与日期的含义。该样本是罚款转换到使用字符串十岁上下的日期文字任强类型语言,因为编译器会看到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文字允许运行时知道在与数据库列进行比较时该做什么。
即使使用Option Strict Off,VB也不允许在日期的常量声明中使用字符串,因为转换是在运行时完成的。然而,日期文字在编译时被转换。 –
是的,我知道。看来OP来自一个用于字符串表示法的平台,我试图解释为什么VB的语法是可取的。我有一个编辑可能有助于使这个更清晰。 –
它被称为*日期文字*它将TEXT转换为实际的DateTime类型。'通常当比较一个硬编码的日期时,我会使用一个字符串'日期不是字符串,并且字符串不是日期 – Plutonix
更具体地说,这是'Date.MinValue'的日期文字,你可以在这种情况下使用。 –