2013-08-22 20 views
7

我有日期/時間格式,例如: 「1-MAR-13 92230」 根據this documentthis link的格式如下: 「d-MMM-YY Hmmss」,這是因爲:日期和時間轉換中的C# - )DateTime.ParseExact(如預期不工作

Day is single digit, 1-30 
Month is 3 letter abbreviation, Jan/Mar etc. 
Year is 2 digits, eg 12/13 
Hour is single digit for 24 hour clock, eg 9, 13 etc. (no 09) 
Minute is standard (eg 01, 52) 
Second is standard (eg 30, 02) 

我想在我的程序運行下面的代碼,但我不斷收到一個錯誤「字符串未被識別爲有效的DateTime。」

string input = "1-Mar-13 92330"; 
     var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.CurrentCulture); 

請幫幫忙,我不是太熟悉的DateTime轉換,但我看不到的地方我已經錯在這裏。謝謝!

更新:這是因爲時間無法在沒有冒號的情況下解析嗎? (例如,1-MAR-13九點22分30秒被解析,但我有這將是不可能從Hmmss重寫至H的外部數據源:MM:SS)

回答

4

你能解決你的約會:

var parts = "1-Mar-13 92230".Split(' '); 

if (parts[1].Length == 5) 
{ 
    parts[1] = "0" + parts[1]; 
} 

var newDate = parts[0] + " " + parts[1]; 

var date = DateTime.ParseExact(newDate, "d-MMM-yy HHmmss", System.Globalization.CultureInfo.CurrentCulture); 
+0

這適用於我。用問題中的日期/時間和「1-Mar-13 102230」進行測試。適用於所有情況。最重要的是,只要不修改源數據,方便(例如添加空格等)。謝謝! – John

4

msdn

如果格式是不包含日期或 時間分隔符(例如「yyyyMMdd HHmm」)的自定義格式模式,請將提供程序參數和每種自定義格式 說明符的最寬格式使用不變文化 。例如,如果要以 格式指定小時,請指定較寬的格式「HH」,而不是較窄的格式,即 「H」。

所以你可以嘗試:

string input = "1-Mar-13 92330"; 
     var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.InvariantCulture); 
+0

這仍然給出了這個異常「字符串未被識別爲有效的DateTime」。 – Rex

+0

我第二次雷克斯的評論。無論出於何種原因,我仍然會得到例外 – John

+0

這是不正確的,例外仍然存在 – Anand

0

你小時分和秒需要分開,因爲他們沒有得到區分。

string input = "1-Mar-13 9 23 30"; 
     var date = DateTime.ParseExact(input, "d-MMM-yy H mm ss", System.Globalization.CultureInfo.CurrentCulture); 
1

你輸入的字符串必須是以下格式

string input = "1-Mar-13 092330"; 

的。如果你回到你的鏈接,它說

H 24-hour clock hour (e.g. 19) 

現在H是24小時,應該代表與領先0.如果不能想象你將如何處理大於9小時,即兩位數的情況。

如果不是你的小時和分鐘和秒必須分開。

string input = "1-Mar-13 9 2330"; 

var date = DateTime.ParseExact(input, "d-MMM-yy H mmss", 
System.Globalization.CultureInfo.InvariantCulture);