2个时间间隔之间的时间差无法返回预期数据

时间:2011-07-20 20:53:20

标签: c# timespan

我在下面创建了2个Timespans:

TimeSpan currentTs = TimeSpan.FromSeconds(43995); //12:13:15
TimeSpan towTime = TimeSpan.FromSeconds(303072); //12:11:12

我试图在几分钟内找到差异(通过我传递它的秒数,看起来它们在不同的日子里)。我希望大约2分钟的差异,但实际上,我得到-57分钟。

int timeDifference = (int)currentTs.Subtract(towTime).Minutes;

有人可以解释我做错了吗?

5 个答案:

答案 0 :(得分:5)

如果您只是寻找分钟之间的差异(不包括天,小时或秒),那么您可以使用

double timeDifference = currentTs.Minutes - towTime.Minutes; // 2

这只是分钟组件的差异。正如其他人所说,这些时间相隔3天,因此TimeSpan可能并不理想。

或者,如果您想要包含秒数,也可以使用

TimeSpan minutes1 = new TimeSpan (0, currentTs.Minutes, currentTs.Seconds);
TimeSpan minutes2 = new TimeSpan (0, towTime.Minutes, towTime.Seconds);

double timeDifference = minutes1.TotalMinutes - minutes2.TotalMinutes // 2.05;

答案 1 :(得分:3)

您正在寻找的TotalMinutes属性不是Minutes - 后者只是时差的分钟部分,前者是以小数分钟表示的全时差:

double timeDifference = currentTs.Subtract(towTime).TotalMinutes;

也更容易阅读:

double timeDifference = (currentTs - towTime).TotalMinutes;

答案 2 :(得分:3)

我猜你想完全忽略时间差异大约3天的事实。在这种情况下,如果你将除法后的余数除以86400(一天中的秒数)并将其传递给TimeSpan.FromSeconds,你应该希望得到你想要的东西:

TimeSpan currentTs = TimeSpan.FromSeconds(43995 % 86400); //12:13:15
TimeSpan towTime = TimeSpan.FromSeconds(303072 % 86400); //12:11:12, ignoring the 3 days.
double timeDifference = (currentTs - towTime).TotalMinutes;

当我尝试这个时,我得到timeDifference的值为2.05。

当然,如果currentTs当天早于towTime(可能是因为午夜落在他们之间),时差就会变为负数。如果您仍想计算两者之间的分钟数,假设currentTs总是在towTime之后,那么您需要将{1440(一天中的分钟数)添加到{{ 1}}如果它是负面的:

timeDifference

答案 3 :(得分:1)

因为第二次的时间跨度不是12:11:12,而是3:12:11:12。

所以你会得到一个负面的结果,如果你做了总分钟(因为它表示类似于-2天,57分钟,57秒),那将是成千上万的......因为你只是要求分钟而不是TotalMinutes你刚拿到-57。

答案 4 :(得分:0)

currentTime小于towTime(你似乎缺少一个数字)。