【发布时间】:2016-11-07 08:18:15
【问题描述】:
我正在计算两个日期之间的时间差,格式为:
时:分:秒
现在我通过以下输入得到这样的输出:
StartDate=2016-06-29 15:52:32.360
EndDate=2016-06-29 15:52:36.970
Output: 0 : 0 : 4
但我想及时得到两位数的输出:
Expected Output: 00 : 00 : 04
输入:
StartDate=2016-06-29 15:52:32.360
EndDate=2016-06-29 15:53:36.970
Expected output: 00 : 01 : 04
这是我的代码:
public class Attendance
{
public int Id { get; set; }
public Nullable<System.DateTime> StartDateTime { get; set; }
public Nullable<System.DateTime> EndDateTime { get; set; }
}
var query = (from t in context.Attendance
select new
{
TotalTime =SqlFunctions.DateDiff("s",t.StartDateTime,t.EndDateTime) /3600 + " : "
+ SqlFunctions.DateDiff("s", t.StartDateTime, t.EndDateTime) % 3600 / 60
+ ": " + SqlFunctions.DateDiff("s", t.StartDateTime, t.EndDateTime) % 60,
}).tolist();
注意:我不想像下面这样:
var query = (from t in context.Attendance.toList().
select new
{
//code to calculate time difference and format time
}).tolist();
【问题讨论】:
-
从另一个中减去一个 DateTime 返回一个 TimeSpan。只需在客户端做减法和格式化
-
@PanagiotisKanavos:这是你说的吗:t.EndDateTime.Value.Subtract(t.StartDateTime.Value)???
-
(datetime-datetime).tostring()
-
另请注意,EF 是一个 ORM,即对象到关系映射器,而不是 SQL 的替代品。在这种情况下,不涉及任何对象或映射。每当您看到诸如连接或 DateDiff 之类的 SQL 概念泄漏到 ORM 查询中时,这强烈表明存在问题
-
您也可以在 DateTime 值之间使用
-。当然,计算差异的 get-only 属性会更好并减少混乱
标签: c# .net entity-framework linq