Sql Server DateDiff in minutes与C#的TotalMinutes不同



如果我运行这个,在 Sql Server 中:

Select DateDiff(mi,'2019-09-16 10:26:33.000', '2019-09-16 10:33:01.000')

我得到 7

但在 C# 中:

DateTime endTime = DateTime.Parse("2019-09-16 10:33:01.000");
DateTime startTime = DateTime.Parse("2019-09-16 10:26:33.000");
int minutes = (int)(endTime - startTime).TotalMinutes;

这将返回 6。如何在这两种情况下获得同步输出?我希望我的 C# 代码返回与我的 SQL Server 相同的代码 - 不仅在这种情况下,而且在所有情况下,无论使用的日期时间如何。

请尝试改用此 Linq 方法:

int minutes = System.Data.Linq.SqlClient.SqlMethods.DateDiffMinute(startTime, endTime);

表达式不相似。您获得的第一个表达式是 2 个日期时间之间的分钟数,该分钟数由"刻度"的数量计算得出。在本例中,您有 26 分钟和 33 分钟,因此分钟值"滴答"了 7 次 (33-26=7(。

对于另一个表达式,您将从较早的值中减去后面的值,然后获取该值中的分钟数。如果C#与SQL Server同时启动它的时钟,这将导致时间1900-01-01 00:06:28.000;因此,为什么你有 6。

如果你想要在 T-SQL 中得到后一个答案,那么你可以做这样的事情:

SELECT DATEPART(MINUTE,CONVERT(datetime,'2019-09-16T10:33:01.000') - CONVERT(datetime,'2019-09-16T10:26:33.000'));

你截断(endTime - startTime).TotalMinutes的结果,将其强制转换为int,这会将其四舍五入为 6。此语句的实际结果可能略小于 7(例如 6.999999997(。通过将其转换为int可以截断它(逗号后截断(,结果为 6 而不是 7。