2016-03-08 141 views
-1

我在我的controller.this代碼給出了一個異常,當我試圖通過DataSet循環。異常是在不同的行當我運行時(例外情況並非發生在確切的行)C# - 「字符串未被識別爲有效的日期時間」異常

例外是;

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

DateTime arrDate = DateTime.Parse(ds.Tables[0].Rows[i]["CheckInDate"].ToString()); 

我想這太;

DateTime createdDate = DateTime.ParseExact(ds.Tables[0].Rows[i]["CheckInDate"].ToString(), "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture); 

,但還沒有成型..

該行的值是2/9/2016 21:20

+0

您傳遞的CheckInDate的值是多少?我們需要先看看。如果它是'dateimte'字段,則可以在不解析的情況下投射到'DateTime'。 – Lloyd

+0

我的猜測是字符串不是有效的日期時間....?! – Liam

+0

@Lloyd Strings like 2/9/2016 21:20 .. –

回答

4

你只需將它轉換爲這似乎是DateTime正確的類型,不需要解析:

DateTime arrDate = ds.Tables[0].Rows[i].Field<DateTime>("CheckInDate"); 

如果它實際上是一個字符串(爲什麼會這樣呢?)使用的M/d/yyyy代替MM/dd/yyyy

DateTime.ParseExact("2/9/2016 21:20", "M/d/yyyy HH:mm", DateTimeFormatInfo.InvariantInfo); 
+0

ds.Tables [0] .Rows [i] [「CheckInDate」]。ToString()將通過2/19/2016 21:20類型的字符串 –

+0

@ThilinaDeSilva:是的,因爲ToString返回一個字符串,即使它是一個'DateTime'。你使用過我的代碼嗎?什麼返回'....字段(「CheckInDate」)'? –

-1

下面嘗試,

If (ds.Tables[0].Rows[i]["CheckInDate"] != null) { 
// your code goes here... 
DateTime arrDate = DateTime.Parse(ds.Tables[0].Rows[i]["CheckInDate"].ToString()); 
} 
+0

我總是使用String.IsNullOrEmpty來驗證字符串 – StarterPack

+0

那麼這個問題的作者沒有添加,因此我認爲可能會出現check沒有什麼,這不是一個有效的理由來評價這個答案。 –

1

ParseExact需要您的字符串正是你解析與模式匹配。

您的模式有需要兩位數月份和日期的「MM/dd」(「01/29」或「10/02」或「01/02」),但您僅傳遞單位數月和數天「2/9」)。

您可能需要更改模式以接受單個數字或更改字符串以傳遞兩位數。

0

你需要知道哪種格式的日期被檢索,然後用正確的格式

DateTime dt=DateTime.ParseExact(ds.Tables[0].Rows[i]["CheckInDate"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture); 

如果格式不apropiate當前區域性(應用程序的語言和區域)

解析它
// for example language English and region Canada 
DateTime dt=DateTime.Parse(ds.Tables[0].Rows[i]["CheckInDate"].ToString(), new CultureInfo("en-CA")); 

OR

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA"); 
DateTime dt = DateTime.Parse(ds.Tables[0].Rows[i]["CheckInDate"].ToString()); //uses the current Thread's culture 

欲瞭解更多信息,請Custom Date and Time Format Strings

相關問題