2012-02-09 29 views
-1

我有一個火鳥數據庫,有些表有時間戳。例如,我的數據庫返回這樣的日期:「2012/1/4 3:08:44」或「2011年12月20日4:38:02」。我用TryParseExact和代碼如下:火鳥日期無法解析

DateTime.TryParseExact(results[i][1], "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt) 

我試過很多格式,如 「MM/DD/YYYY HH:MM:SS TT」,但沒有一次成功。請幫助我,否則我會發瘋這一次......

+0

我只是測試你的代碼Linqpad迅速,兩個字符串(「2012/1/4 3:08: 44 PM「,」12/20/2011 4:38:02 PM「)被成功解析。你能否提供解析失敗的另一個例子? – afrischke 2012-02-09 01:11:06

+0

我使用了「G」,它解決了:[鏈接](http://msdn.microsoft.com/en-us/library/az4se3k1.aspx) – Mehmed 2012-02-09 13:19:41

+0

你確定包含在'resultst [i] [1 ]'還不是DateTime? – 2012-02-09 18:52:16

回答

0

看一看這篇文章

http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

的關鍵部分看就是

// Parse date-only value without leading zero in month using "d" format. 
// Should throw a FormatException because standard short date pattern of 
// invariant culture requires two-digit month. 
dateString = "6/15/2008"; 
try { 
    result = DateTime.ParseExact(dateString, format, provider); 
    Console.WriteLine("{0} converts to {1}.", dateString, result.ToString()); 
} 
catch (FormatException) { 
    Console.WriteLine("{0} is not in the correct format.", dateString); 
} 

所以它可能是你的數據庫沒有返回一個標準模式。看起來很愚蠢,但這會引發異常。在這個例子中,它只是說出一個「僅限日期」的值,而不是你自己的。

如果你有一個字符串的日期,你可以做舊的手工修復行動:

public static string FixDate(string date) 
{ 
    return (date.IndexOf('/') == 1) ? "0" + date : date; 
}