以24小时格式接受值时的时差计算

时间:2017-07-12 10:25:39

标签: c#

在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 = 0800TextBox4.Text = 2000然后TextBox12.Text = 12

请帮忙。

2 个答案:

答案 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,以防万一用户输入的值不正确(如果输入不正确,您将从FormatExceptionParse方法获得ParseExact