2014-10-09 66 views
0

我想出瞭如何解析輸入字符串到日期時間對象。如何解析一個字符串輸入到DateTime?

但是,如果我輸入字符串並運行啓動計時器的方法然後停止它,我不能重新編輯字符串輸入沒有得到格式異常。

在測試中,我輸入:"00 : 00 : 10 : 000",然後開始我的定時器和秒錶,但是當我打電話停止雙方並嘗試輸入一個新值的字符串,如"00 : 00 : 22 : 000"它使我有以下異常:

An exception of type 'System.FormatException' occurred in mscorlib.ni.dll but was not handled in user code 

Additional information: String was not recognized as a valid DateTime. 

這是怎樣的字符串被解析到一個日期時間:

  //Assign text box string value to a date time variable. 
      DateTime workDt = DateTime.ParseExact(wrkString.Replace(": ", ":").Replace(" :", ":"), "HH:mm:ss:fff", CultureInfo.InvariantCulture); 
      DateTime restDt = DateTime.ParseExact(rstString.Replace(": ", ":").Replace(" :", ":"), "HH:mm:ss:fff", CultureInfo.InvariantCulture); 

有沒有辦法在代碼或可能是一個額外的步驟我錯過在解析字符串處理這種類型的輸入的異常?

+2

如果您正在使用時間間隔,則可以使用TimeSpan而不是DateTime。 – Luizgrs 2014-10-09 18:01:22

+1

您的「DateTime」字符串不包含日期信息。正如Luizgrs建議使用[TimeSpan](http://msdn.microsoft.com/en-us/library/system.timespan(v = vs.110).aspx_)。 – Jasen 2014-10-09 18:03:45

回答

2

{這是一個註釋,不是一個答案,但我需要正確格式化。}

必須有導致你沒有提供這個問題的一些其他信息。這個工作對我來說:

string s= "00 : 00 : 10 : 000"; 
DateTime workDt = DateTime.ParseExact(s, "HH : mm : ss : fff", CultureInfo.InvariantCulture); 
s= "00 : 00 : 22 : 000"; 
DateTime restDt = DateTime.ParseExact(s, "HH : mm : ss : fff", CultureInfo.InvariantCulture); 

但是因爲你只處理一次數據,你會使用TimeSpan反而會更好:

string s= "00 : 00 : 10 : 000"; 
TimeSpan workTm = TimeSpan.ParseExact(s, @"hh\ \:\ mm\ \:\ ss\ \:\ fff", CultureInfo.InvariantCulture); 
s= "00 : 00 : 22 : 000"; 
TimeSpan restTm = TimeSpan.ParseExact(s, @"hh\ \:\ mm\ \:\ ss\ \:\ fff", CultureInfo.InvariantCulture); 

注意使用TimeSpan.Parse當冒號和空格需逃脫了。

+0

我試過上面使用TimeSpan而不是DateTime,但沒有TimeOfDay屬性來比較已用時間。使用TimeSpan時可以使用哪些等效屬性? – 2014-10-13 19:43:39

+0

如果'(myStopwatch.Elapsed> = workDt.TimeOfDay)'目前我可以在DateTime中使用它,但是我怎樣才能達到與TimeSpan相同的效果? – 2014-10-13 19:44:42

+0

@BrianJ沒有一個 - 時間跨度是_duration_,而不是time_中的_point。您應該能夠直接比較兩個'TimeSpan'值:'if(myStopwatch.Elapsed> = workDt)'。 – 2014-10-13 19:55:15

1

嘗試轉換類:

myDateAsString="3/29/2014"; 
try 
{ 
Convert.ToDate(myDateAsString) 
} 
catch(Format exception) 
{ 
//do something 
} 

這是另一種方法,我同意,但我認爲這是更容易,我希望它能幫助:)

1

如果你知道的東西可以去錯了我建議您使用TryParseExact方法。

我還建議在使用時間間隔時使用TimeSpan代替DateTime。無論如何,該方法也適用於DateTime ...

TimeSpan ts; 
if (TimeSpan.TryParseExact(wrkString.Replace(": ", ":").Replace(" :", ":"), "HH:mm:ss:fff", CultureInfo.InvariantCulture, out ts)) 
{ 
    //ts formatted successfully 
} 
else 
{ 
    //failure 
} 
1

您還可以使用DateTime.TryParse進行轉換。

DateTime dateValue; 
string[] dateStrings = "1/1/2014"; 
if (DateTime.TryParse(dateString, out dateValue)) 
{ 
//code 
}