2013-05-13 62 views
4

我已經搜索了這樣的解決方案論壇,但我沒有找到一個實際上匹配我的特定問題。問題與DateTime.ParseExact方法:總是拋出異常,即使正確的格式

這可能需要更有經驗的眼睛才能找到問題,所以我感謝所有幫助!

問題:我想解析一個DateTime變量的日期字符串。但是,即使字符串日期格式完全相同,它仍會引發異常。

我想知道爲什麼,以及我如何解決它。我真的看不到那裏有什麼問題!

try 
{ 
    string value = "Sep-17-2012 03:04:07 am"; 

    string format = "M-dd-yyyy hh:mm:ss tt"; 

    DateTime temp = DateTime.ParseExact(value, format, CultureInfo.InvariantCulture); 
} 
catch(Exception e){} 

由於提前,

瘋狂

+0

您還可以使用'TryParseExact'代替try catch塊的。它可能會比嘗試抓住更快。 – Silvermind 2013-05-13 16:04:29

+0

感謝提示Silvermind。如果TryParseExact失敗,它是否也會返回null? try catch可能更有用,因爲我想知道導致異常的錯誤是什麼。這種確實取決於用戶需要執行的代碼! – MadGatsu 2013-05-13 21:42:57

+0

實際上拋出的錯誤是非常通用的,只是一個'FormatException'與一個消息'字符串沒有被識別爲有效的DateTime.'所以它不會得到更具體的比。 'TryParse'如果解析則返回'true',否則返回'false',它使用'out'關鍵字將值傳遞給引用。有關更多信息,請參閱['DateTime Methods'](http://msdn.microsoft.com/zh-cn/library/497a406b.aspx)。 – Silvermind 2013-05-13 21:55:07

回答

7

你的格式應該是MMM不是M http://www.dotnetperls.com/datetime-format

string format = "MMM-dd-yyyy hh:mm:ss tt"; 

米 - 顯示一個數字的月份數

MMM - 顯示三個字母一個月

+0

@LuisVale請不要忘記。如果這個答案解決了你的問題,選擇它的複選標記。謝謝 – 2013-05-13 16:21:47

+1

該死的,我不知道我是怎麼錯過的。我有點困惑,因爲我使用datetimepicker對象(如在這裏找到:http://jqueryui.com/resources/demos/datepicker/date-formats.html),並在那裏顯示格式M作爲名稱這個月。我忘記檢查DateTime對象中「M」的實際含義。感謝AMR!我必須找出解析它的方法,因爲它意味着兩個對象中的不同事物。乾杯! – MadGatsu 2013-05-13 21:48:49

1

需要MMM的一個月。

try 
{ 
string value = "Sep-17-2012 03:04:07 am"; 

string format = "MMM-dd-yyyy hh:mm:ss tt"; 

DateTime temp = DateTime.ParseExact(value, format, CultureInfo.InvariantCulture); 
} 
catch(Exception e){} 
相關問題