2012-04-12 125 views
3

我嘗試字符串轉換爲datetime但每次我得到:字符串未被識別爲有效的DateTime?

字符串未被識別爲有效的DateTime。

代碼是:

string format = "dd/MM/yyyy"; 

obj.TransDate = DateTime.ParseExact(lbl_TransDate.Text.Split('/')[0] + "/" + lbl_TransDate.Text.Split('/')[1] + "/" + lbl_TransDate.Text.Split('/')[2], format, CultureInfo.InvariantCulture); 

當我調試,我試圖解析日期是:12/4/2012

+2

出的純好奇,爲什麼不' DateTime.ParseExact(lbl_TransDate.Text,format,CultureInfo.InvariantCulture)'? – Vlad 2012-04-12 12:04:46

+0

:) 這不是我的代碼,只是我測試這部分 – 2012-04-12 12:19:07

+0

你用這段代碼檢查它'DateTime dt; string Temp1 =「您的日期」; (DateTime.TryParse(Temp1,out dt)) //如果是有效日期 string date = dt.ToShortDateString(); string time = dt.ToShortTimeString(); } ' – Pankaj 2012-04-12 15:21:05

回答

9

所需的格式是

string format = "dd/M/yyyy"; 

我不明白一個事情,但爲什麼拆分連接字符串,因爲你會得到同樣的東西?

如果輸入的是2012年12月4日,通過「/」拆分後,你會得到12,4,2012,然後將它們連接起來回到獲得「2012年12月4日」。爲什麼這個?

另外,如果你真的需要那一剎那,你可以存儲到一個數組,所以你並不需要拆分的3倍:

var splits = lbl_TransDate.Text.Split('/'); 
DateTime.ParseExact(splits[0] + "/" + splits[1] + "/" + splits[2], ...); 

如果你不信任的輸入,劈叉陣列可能不是長度= 3,多的話,你可以使用DateTime.TryParseExact

編輯您可以使用多種格式 過載所以,如果輸入的可能是2012年12月4日或12/04/2012,你可以給這兩種格式

var formats = new[] {"dd/M/yyyy","dd/MM/yyyy"}; 
var date = DateTime.ParseExact("12/4/2012", formats, 
             System.Globalization.CultureInfo.InvariantCulture, 
             System.Globalization.DateTimeStyles.AssumeLocal); 
+0

'informix' date「dd/MM/yyyy」。 – 2012-04-12 12:04:34

+0

'當我嘗試你的日曆時,System.Globalization.GregorianCalendar.'不支持字符串表示的DateTime。 – 2012-04-12 12:07:49

+0

最後的編輯與我一起工作,感謝很多 – 2012-04-12 12:24:03

1

您指定MM當你只有一個單一的數字。或者只使用一個M,或者使用PadLeft函數向左填充0。

下面的代碼演示了這種既ddMM填充根據需要

string format = "dd/MM/yyyy"; 
string mydate = "12/4/2012"; 
DateTime t = DateTime.ParseExact(mydate.Split('/')[0].PadLeft(2,'0') + "/" + 
           mydate.Split('/')[1].PadLeft(2,'0') + "/" + 
           mydate.Split('/')[2], format, CultureInfo.InvariantCulture); 

輸出是:

12/04/2012 00:00:00 
2

我同意其他的答案,它看起來像你做了很多解決什麼應該是一個簡單的問題。我會使用文化信息中的英國日期格式。

var convertedDay = DateTime.Parse("12/04/2010", new CultureInfo("en-GB").DateTimeFormat); 
相關問題