如果我运行这个,在 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。