通常當比較硬編碼的日期時,我會使用一個字符串,但如果未在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
通常當比較硬編碼的日期時,我會使用一個字符串,但如果未在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
爲字符串字面(帶"
)
這就像「爲字符串,但# is for date。
Dim date1 As Date = #5/1/2008 8:30:52AM#
大多數語言都要求您爲日期文字使用字符串,然後編譯器會將該字符串解析爲日期對象(在編譯時,當然......它從來不是內存中的字符串)。 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'的日期文字,你可以在這種情況下使用。 –