我在VB中使用Date.Parse/ParseExact功能有點頭痛。 爲了推測,我有一個ASP.Net 4.0應用程序,在其中一個頁面上有一個用戶選擇日期和時間的日曆控件,這些都被輸入到一個字符串(strReqDeadline),該字符串需要以下歐洲/英國日期時間格式:DD/MM/YYYY HH:MM:SS.FFFDate.Parse/ParseExact不會改變日期的奇怪問題(ASP.Net)
因此,例如strReqDeadline的內容將是:29/03/2013 16:30:00.000
我然後需要插入到這SQL日期時間列,所以顯然它需要從英國轉換爲美國/日期時間格式。我一直試圖用Date.Parse和Date.ParseExact來做到這一點,但沒有成功。下面應工作根據研究,我已經做了:
strReqDeadline = "29/03/2013 16:30:00.000"
Dim usDate = As Date = Date.ParseExact(strReqDeadline, "dd/MM/yyyy HH:mm:ss.fff", System.Globalization.CultureInfo.InvariantCulture)
然而,實際發生在運行時的bizzare,該Date.ParseExact功能從時間剪掉分形秒(據我可以看到它不應該這樣做,因爲過濾器指定.fff),否則保持整個字符串完全不變。 所以,如果usDate的價值輸出,它顯示如下:29/03/2013 16:30:00
它所應該包含爲datetime:2013年3月29日4:30 PM
真是個奇怪的事情是,如果我把usDate手錶和啓動應用程序,在開發環境中它的值顯示爲#3 /二千零十三分之二十九4:30 PM#,無論是在觀察名單,當在源窗口中懸停,但任何形式的輸出都會顯示原始字符串,只是減去秒的小數部分,而不會轉換爲日期時間。
從我讀'InvariantCulture'規範應該否定任何特定於語言環境的輸出問題,但爲了防止出現這種問題,我還嘗試使用System.Globalization.CultureInfo.CreateSpecificCulture(「en- GB「)(也嘗試過FR-FR),但這沒有什麼區別。如果這與客戶端和服務器上的Windows區域設置有任何相關性,則設置爲英國。
也許我錯過了很明顯的東西,但我不明白爲什麼我會得到這個輸出,Date.ParseExact不會拋出任何異常或抱怨字符串不被識別,但我掙扎要理解它爲什麼只是刪除分數秒並且什麼也不做,尤其是因爲輸入彈簧與指定的掩碼完全匹配。
我會非常感興趣的是,如果有人遇到過這樣的奇怪問題以及您對它做了什麼!
謝謝:)
編輯:用SQL部分的完整代碼如下:
strReqDeadline = "29/03/2013 16:30:00.000"
Dim usDate As Date = Date.ParseExact(strReqDeadline, "dd/MM/yyyy HH:mm:ss.fff", System.Globalization.CultureInfo.InvariantCulture)
'SQL
Dim con As New Data.SqlClient.SqlConnection("data source=XXXXX;initial catalog=YYYYY;Integrated Security=True")
Dim cmd As New Data.SqlClient.SqlCommand()
cmd.Connection = con
cmd.CommandText = "INSERT INTO Requests (ReqOwnerID, ReqDeadline, ReqStatus)" _
& "VALUES ('" & UserID & "', '" & usDate & "', '1')"
con.Open()
Dim NewReqID = cmd.ExecuteScalar()
con.Close()
'
如果你打算在Sql date列中存儲這個日期,爲什麼要先將它轉換爲字符串? – 2013-03-21 14:24:11
不幸的是,它被以前由某人添加的自定義日曆控件作爲字符串輸出。我將考慮用可以處理日期類型的本地代碼來替代它,但現在我只需要將它整理並運行即可。你完全正確,但是沒有意義的任務! :) – 2013-03-21 16:44:01