在C#中,我接受文本框中的2个时间值,并想要计算这两次之间的时间。时间以24小时格式接受为hhmm。没有任何分号或。在小时和分钟之间使用。
我尝试过以下代码:
DateTime ts1 = DateTime.Parse(TextBox3.Text);
DateTime ts2 = DateTime.Parse(TextBox4.Text);
TimeSpan ts = ts2-ts1;
TextBox12.Text = Convert.ToString(ts);
将错误视为
字符串未被识别为有效的DateTime。
假设TextBox3.Text = 0800
和TextBox4.Text = 2000
然后TextBox12.Text = 12
请帮忙。
答案 0 :(得分:1)
由于文本框中文本的格式不是"默认"日期/时间格式调用LDAP DB
失败/返回错误结果。 (您使用的是不带冒号TimeSpan.Parse()
字符的格式来分隔小时和分钟。)
在这种情况下,您需要明确指定格式,例如使用TimeSpan.ParseExact()
method。
以下示例将文本:
解析为"0854"
值,表示时间TimeSpan
08:54
答案 1 :(得分:0)
你有三个问题:
1)尝试将时间解析为日期。在这里使用DateTime.Parse
是不合适的。
2)即使您使用TimeSpan.Parse
,您的示例数据也不符合解析方法识别它所需的格式。接受的格式如下所示:https://msdn.microsoft.com/en-us/library/se73z7b9(v=vs.110).aspx对于时间部分,您至少需要在输入中的小时和分钟之间包含冒号(:
),例如: 08:00
。
因此,您可以这样做,或使用TimeSpan ts1 = TimeSpan.ParseExact(TextBox3.Text, "hhmm", System.Globalization.CultureInfo.InvariantCulture)
为其提供自定义格式进行识别。
3)您应该使用TimeSpan.Subtract
方法准确地从另一个时间段中扣除一个时间段。目前只使用-
不太可行,系统无法知道您是否需要以小时,分钟,秒或其他任何方式输出。
TextBox12.Text = ts2.Subtract(ts1).Hours
应该给你你想要的东西。
您可能也应该考虑其他一些先前的验证 - 在允许输入之前检查ts2实际上是否大于ts1,并且可能使用TryParseExact
尝试解析输入并返回true / false,以防万一用户输入的值不正确(如果输入不正确,您将从FormatException
或Parse
方法获得ParseExact
。