在vb.net中有一個奇怪的問題。使用ParseExact將字符串格式轉換爲日期
這樣,我沒有問題,轉換使用ParseExact,一些日期格式和CultureInfo的一個字符串日期:使用DataReader
While dr.Read
Dim f As String = String.Format("{0:dd-MMM-yyyy}", dr.Item("fec_estado_insc")))
' Value of f is "30-mar-2012"
xdate = DateTime.ParseExact(
f,
"dd-MMM-yyyy",
System.Globalization.CultureInfo.InvariantCulture)
End While
出現錯誤時
Dim f As String = "30-mar-2012"
' Value of f is "30/03/2012"
xdate = DateTime.ParseExact(
f,
"dd-MMM-yyyy",
System.Globalization.CultureInfo.InvariantCulture)
問題開始:「字符串未被識別爲有效的日期時間「
如您所見,變量f是一個字符串,其值來自數據讀取器的一行,但是仍然是一個字符串。
這怎麼可能?
編輯
我發現一個黑客的方式來獲得最新的 「DD-MMM-YYYY」 格式與成龍的幫助。我要創建這樣的功能:
Public Shared Function Giveme_Date_dd_MMM_yyyy(ByVal XobjValue As Object) As Nullable(Of Date)
If XobjValue Is System.DBNull.Value Then
Return Nothing
ElseIf XobjValue Is Nothing Then
Return Nothing
ElseIf XobjValue.ToString.Trim.Equals("") Then
Return Nothing
End If
Dim f As String = String.Format("{0:dd-MMM-yyy}", XobjValue)
Dim dtResult As Date, xdate As Date
If DateTime.TryParse(f, dtResult) Then
xdate = CDate(dtResult.ToString("f", System.Globalization.CultureInfo.InvariantCulture))
End If
Return xdate
End Function
而在數據庫中,不得不改變SELECT查詢這樣:
OPEN r_cursor FOR
SELECT to_char(fec_estado_insc,'dd/mm/yyyy') AS fec_estado_insc,
blah
blah
blah
然而,原來的問題仍然存在。一些vb.net的錯誤?
也許試試這個? 'Dim f As String = CStr(String.Format(「{0:dd-MMM-yyy}」,dr.Item(「fec_estado_insc」))。Clone())' –
獲取同樣的錯誤:「字符串未被識別爲一個有效的日期時間「。這很奇怪。如果我直接設置變量f =「30-mar-2012」,則不會出錯。但是從DataReader填充f值時出現錯誤。 – Delmonte
一旦你設置了'f'的值,它就是一個字符串。字符串是一個字符串,不管它是如何設置或來源的;它不會影響你的下一行。你正在做一些錯誤的事情......試着逐行檢查代碼並檢查變量值。 –