0

我已经弄清楚如何将输入字符串解析为日期时间对象。

但是,如果我输入字符串并运行启动计时器的方法然后停止它,我将无法重新编辑字符串输入而不会出现格式异常。

在测试中我输入:"00 : 00 : 10 : 000"然后启动我的计时器和秒表,但是当我对两者都调用 stop 并尝试为字符串输入一个新值时,例如"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);

有没有办法在代码中处理这种类型的输入异常,或者我在解析字符串时可能缺少一个额外的步骤?

4

4 回答 4

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冒号和空格时需要转义。

于 2014-10-09T18:11:27.130 回答
1

尝试转换类:

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

这是另一种方法,我同意这一点,但我认为它更容易,我希望它有所帮助:)

于 2014-10-09T18:01:13.663 回答
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
}
于 2014-10-09T18:05:07.030 回答
1

也可以DateTime.TryParse用来转换。

DateTime dateValue;
string[] dateStrings = "1/1/2014";
if (DateTime.TryParse(dateString, out dateValue)) 
{
//code
}
于 2014-10-09T18:07:07.710 回答