Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以24小时格式接受值时的时差计算_C# - Fatal编程技术网

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

C# 以24小时格式接受值时的时差计算,c#,C#,在C#中,我接受文本框中的两个时间值,并希望计算这两次之间的时间。时间以24小时格式接受为hhmm。没有任何分号或分号。在小时和分钟之间使用 我尝试了以下代码: DateTime ts1 = DateTime.Parse(TextBox3.Text); DateTime ts2 = DateTime.Parse(TextBox4.Text); TimeSpan ts = ts2-ts1; TextBox12.Text = Convert.ToString(ts); 将错误获取为 字符串未被识别

在C#中,我接受文本框中的两个时间值,并希望计算这两次之间的时间。时间以24小时格式接受为hhmm。没有任何分号或分号。在小时和分钟之间使用

我尝试了以下代码:

DateTime ts1 = DateTime.Parse(TextBox3.Text);
DateTime ts2 = DateTime.Parse(TextBox4.Text);
TimeSpan ts = ts2-ts1;
TextBox12.Text = Convert.ToString(ts);
将错误获取为

字符串未被识别为有效的日期时间

假设
TextBox3.Text=0800
TextBox4.Text=2000
然后
TextBox12.Text=12


请提供帮助。

由于文本框中的文本格式不是“默认”日期/时间格式,因此调用
TimeSpan.Parse()
失败/返回错误结果。(您使用的格式没有冒号
字符来分隔小时和分钟)

在这种情况下,您需要明确指定格式,例如使用

以下示例将文本
“0854”
解析为
TimeSpan
值,表示时间
08:54

TimeSpan.ParseExact("0854", "hhmm", System.Globalization.CultureInfo.InvariantCulture)

你有三个问题:

1) 尝试将时间解析为日期。在这里使用
DateTime.Parse
是不合适的

2) 即使使用
TimeSpan.Parse
,示例数据也不符合解析方法识别它所需的格式。此处显示了可接受的格式:对于时间部分,您至少需要在输入的小时和分钟之间包含一个冒号(
),例如
08:00

因此,您可以这样做,也可以使用
TimeSpan ts1=TimeSpan.ParseExact(TextBox3.Text,“hhmm”,System.Globalization.CultureInfo.InvariantCulture)
为其提供一种自定义的识别格式

3) 您应该使用
TimeSpan.Subtract
方法从另一个时间段中准确扣除一个时间段。目前仅使用
-
不太可能工作,系统将不知道您是否希望以小时、分钟、秒或其他任何形式输出

TextBox12.Text = ts2.Subtract(ts1).Hours
应该给你想要的


您可能还应该考虑其他一些先前的验证——在允许输入之前检查TS2实际上大于TS1,并且在用户输入值不正确的情况下,可能使用<代码> TyPARSEEXECUT/<代码>试图解析输入并返回true / false。(如果输入不正确,您将从

Parse
ParseExact
方法获得
FormatException
)请在TimeSpan对象上重新设置方法以获得准确的结果。如果文本框仅包含时间,为什么要尝试分析日期?请尝试。我已尝试了TimeSpan。分析,但没有显示正确的结果。正如我所说,输入的值需要符合此处的规范:。目前我不相信它们符合您的示例e数据。也请使用TimeSpan。减法thttps://msdn.microsoft.com/en-us/library/system.timespan.subtract(v=vs.110).aspx执行减法操作,然后返回一个新的时间跨度,并可以按照您希望的格式输出(目前,它不知道是输出小时还是分钟或秒或其他)使用datetimepicker而不是textbox。感谢Bassfader,它正在工作,但未显示所需的结果。假设出发时间为2000,到达时间为0900,则结果必须为13:00:00,但显示为-11:00:00@AtulPatil20-9=11。13从哪里来?@ADyson 20表示晚上8点,9表示上午9点。所以第一天是having 24-20=4小时和第二天的9小时。因此4+9=13小时。@bassfader感谢您的回答,它可以工作,但我无法在这里计算数据类型的转换。很抱歉,我对所有这些都是新手。第一次使用timespan。根据您的建议,我做了如下更改:
int temp=0;timespan ts1=TimeSpana.ParseExact(TextBox3.Text,“hhmm”,System.Globalization.CultureInfo.InvariantCulture);TimeSpan ts2=TimeSpan.ParseExact(TextBox4.Text,“hhmm”,System.Globalization.CultureInfo.InvariantCulture);if(ts1ts2){temp=(24-Convert.ToInt32(ts1))+Convert.ToInt32(ts2);}TextBox12.Text=Convert.ToString(temp);