2012-10-24 119 views
1

我知道這樣的問題在這裏噸。請通過一次無法解析日期時間在C#

我有一個string來自具有當前日期的文本框,例如, 10/9/2012,我的課程屬性爲DateTime?類型。我正在使用Convert.ToDateTime(datetime_string_from_textbox),但它給了我一個FormatException。然後我試着按照Jon Skeet here的建議嘗試DateTime.ParseExact(string, format, CultureInfo, DateTimeStyle),但它給了我同樣的例外。

還有一件事—我的本地機器日期時間格式是dd-mm-yyyy。當我切換到mm/dd/yyyy格式的代碼工作正常。所以基本上,我想知道如何將有效的日期時間字符串解析爲DateTime對象,而不考慮區域設置,或任何設置或本地機器上的任何依賴關係。

這可能嗎?

更新:代碼中使用

employee.JoiningDate = DateTime.ParseExact(string.Format("{0} 00:00:00", JoiningDate.Text.Trim()), "MM/dd/yyyy hh:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); 

存在的問題,並要求解決

我的系統日期時間顯示24-10-2012(即10月24日),我有10個/ 17/2012年在我的文本框(即,10月17日),因爲文本框的日期也是有效的,部署後再次客戶端日期時間格式將成爲未知,所以,我想要一個通用的方式來解析任何有效的日期時間字符串,無論區域設置。這可能嗎?

+1

你用什麼格式字符串? – Bridge

+1

你用DateTime.ParseExact指定了什麼格式? – AdaTheDev

+0

使用蒙版控制並將輸入限制爲特定格式。解析日期時使用相同的格式。 – jags

回答

5

這應該工作:

var date = DateTime.ParseExact(str, "M/d/yyyy", CultureInfo.InvariantCulture); 

隨着波紋管測試:

enter image description here

+0

如果我的日期是2012年12月24日,那麼MM/dd/yyyy會起作用嗎? –

+0

是的,它會工作.. MM和M之間的差異僅在一個數字月.. –

0

這完全取決於機器的設置。 DateTime.ParseExact(str, "dd/MM/yyyy", CultureInfo.InvariantCulture);將適用於英國格式,但它會給美國格式的格式例外。所以根據你的機器設置使用格式。

+0

據我所知,「不變文化」只是基於英語,而不是文化或地區特定的。 http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.invariantculture.aspx – Silvermind

+0

這是我所經歷的。使用美國格式,此代碼將工作,並使用英國格式,此代碼將無法正常工作。至少它與我同在。 –

+0

我試過這個:'DateTime.ParseExact(「2012年12月24日」,「dd/MM/yyyy」,System.Globalization.CultureInfo.InvariantCulture); \t DateTime.ParseExact(「24-12-2012」,「dd-MM-yyyy」,System.Globalization.CultureInfo.InvariantCulture); \t DateTime.ParseExact(「24.12.2012」,「dd.MM.yyyy」,System.Globalization.CultureInfo.InvariantCulture);'它們都會給出'24-12-2012 0:00:00'所以它的行爲如預期, 沒有什麼不對。我的本地設置是'dd-MM-yyyy'。 – Silvermind

0

請嘗試以下,如果它工作

var formatInfo = new DateTimeFormatInfo(); 
formatInfo.ShortDatePattern = "MM/dd/yyyy"; 
DateTime.Parse(date, formatInfo);