Timespan差异无法正确计算

时间:2017-10-25 21:23:58

标签: c# webforms timespan

我正在用C#构建一个Web表单。开始时间(开始时间,开始时间和开始时间(上午或下午))和完成时间为3,我有3次下降。我的目标是计算差异。一切正常,直到我选择正午或午夜。我选择正午和调试,值显示为1.这是我的代码。

var startHourDDL = ddlStartHour.SelectedValue;
var startMinuteDDL = ddlStartMinute.SelectedValue;
var startTOD = ddlStartTOD.SelectedValue;

int startHour = Convert.ToInt32(startHourDDL);
int startMinute = Convert.ToInt32(startMinuteDDL);

var finishHourDDL = ddlFinishHour.SelectedValue;
var finishMinuteDDL = ddlFinishMinute.SelectedValue;
var finishTOD = ddlFinishTOD.SelectedValue;

int finishHour = Convert.ToInt32(finishHourDDL);
int finishMinute = Convert.ToInt32(finishMinuteDDL);

if (startTOD == "PM")
{
    startTime = new TimeSpan(startHour + 12, startMinute, 0);
}

else
{
    startTime = new TimeSpan(startHour, startMinute, 0);
}

if (finishTOD == "PM")
{
    finishTime = new TimeSpan(finishHour + 12, finishMinute, 0);
}

else
{
    finishTime = new TimeSpan(finishHour, finishMinute, 0);
}

TimeSpan diff = finishTime - startTime;
string time = String.Format(diff.Hours + " Hours, " + diff.Minutes + " Minutes");

lblDurAmount.Text = time;

因此,如果我选择下午2:00作为开始时间而下午4:00作为结束时间,则标签显示2小时。但是,如果我选择12:00 PM作为开始时间而下午2:00选择结束时间,我会得到-10小时。

这是我在中午12:00调试时的开始时间。

{1.00:00:00}

这是我在下午5:00选择时得到的结果

{17:00:00}

我无法弄清楚为什么它不会在中午设置为24.我甚至尝试添加if语句

if (startHour == 12 && startTOD)
{
    startTime = new TimeSpan(24, startMinute, 0);
}

但那也没有用。价值仍然是1.00。

2 个答案:

答案 0 :(得分:1)

TimeSpan用于存储一段时间,而不是一天中的时间。

因此,当您认为存储“12PM”时,您实际存储的是24小时时间段。而“2PM”是一个14小时的时间段。

因此“2PM” - “12PM”= 14小时--24小时(即-10小时)。

要解决此问题,您需要将日期/时间存储在DateTime中,而不是TimeSpan

答案 1 :(得分:1)

只有当startTime小于finishTime时,您的操作才有效,否则所有结果都将返回为否定值。在你的例子中,下午2点到了下午2点,所以当你减去下午2点到12点时,你会得到-10小时 您需要检查startTime是否在finishTime之后,如果为true,则交换两个值

if (finishTime < startTime)
{
    TimeSpan swap = finishTime;
    finishTime = startTime;
    startTime = swap;
}
TimeSpan diff = finishTime - startTime;
string time = String.Format(diff.TotalHours + " Hours, " + diff.Minutes + " Minutes");