2011-03-19 157 views
1

我有一個從日曆控件服用日期我的asp.net頁面上有兩個文本框:日期時間誤差僅

在日曆的選擇,我分配的選擇的價值已經到隱變量。下面 是代碼:

DateTime dtOne; 
      dtOne = Convert.ToDateTime(hdnOne.Value.Trim().ToString()); 
      DateTime dtTwo = Convert.ToDateTime(hdnTwo.Value.Trim().ToString()); 

當保持斷點我得到這個值dtOne

9/2/2011 02:03...

它在預督促部署的站點工作正常,但是當我複製粘貼相同的部署代碼到生產我得到以下錯誤:

System.FormatException: String was not recognized as a valid DateTime. 

任何建議爲什麼發生和如何解決它?

回答

5

服務器上的文化設置很可能與您的開發計算機不同。在這種情況下,我會認爲DateSeperator是罪魁禍首。

比較了兩個環境中的hdnOne.Value.Trim()。ToString()的值嗎?

+0

你能告訴我如何解決這個錯誤嗎? – Chris 2011-03-19 17:56:32

+3

將「en-GB」替換爲您選擇的文化: CultureInfo ci = new CultureInfo(「en-GB」); Convert.ToDateTime(hdnOne.Value.Trim()。ToString(),ci); – JoDG 2011-03-19 18:01:50

+0

非常感謝。它對我來說就像一個魅力:-) – Chris 2011-03-21 12:28:04

1

您的生產環境和測試環境是否有區別 - 特別是關於文化/區域設置? - 也許嘗試明確地匹配你的javascript日曆控件和你的代碼的Parse使用的文化。

這個異常是否與所有內容一起被拋出?或者只是一些用戶內容?如果您使用的是TextBox,那麼這可能只是一些用戶(或某些語言環境中的用戶)輸入意外內容。

不管這個電流修復,則需要期待在運行時,這個錯誤一次真正的用戶得到他們的手在您的網頁 - 這樣無論是處理出現FormatException或使用的TryParse

+0

文本框處於只讀模式。我不知道如何找到兩種服務器文化之間的差異,有沒有什麼辦法可以做到這一點? – Chris 2011-03-19 17:57:54

+0

看看這個鏈接 - http://msdn.microsoft.com/en-us/library/kc8s65zs.aspx - 它會讓你設置文化的解析操作 – Stuart 2011-03-19 17:58:51

4

是的 - 這是一個區域設置問題。本質上,您在Convert.ToDateTime中使用的格式字符串無法解析生產服務器返回的日期時間。因此,要麼更改生產服務器的區域設置,要麼這是不合適的(也可能是)在方法參數中使用適當的IFormatProvider參數來解釋返回的字符串實際處於哪種日期時間格式,以便它可以解析它。

資訊:http://msdn.microsoft.com/en-us/library/system.convert.todatetime.aspx

0

如果文本框處於只讀模式,那麼你會得到空當你將獲取從文本框中的值。也使用datetime.tryparse而不是convert