2014-10-09 26 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 
}