我有数据表
这是Model
public partial class Logging
{
public string Imei { get; set; }
public Nullable<System.DateTime> CurDateTime { get; set; }
public Nullable<System.DateTime> GPSDateTime2 { get; set; }
public Nullable<decimal> Latitude2 { get; set; }
public Nullable<decimal> Longitude2 { get; set; }
public string Speed { get; set; }
public Nullable<int> Datatype { get; set; }
public int Id { get; set; }
[NotMapped]
public TimeSpan? FirstStartDifference { get { return CurDateTime - DateTime.Today; } }
[NotMapped]
public int coeff = 2;
}
我需要在CurDateTime和午夜之间以微小的方式查找数据
但是public TimeSpan? FirstStartDifference { get { return CurDateTime - DateTime.Today; } }
不正确,因为DateTime.Today
今天就是-
。
在控制器上我这样做
public JsonResult GetStops()
{
using (var ctx = new GoogleMapTutorialEntities())
{
var firstitem = ctx.Loggings.Where(x => x.Datatype == 1).AsEnumerable().Select(
x => new
{
lng = x.Longitude2,
lat = x.Latitude2,
difference = (int)(x.FirstStartDifference?.TotalMinutes ?? -1) * x.coeff
}).FirstOrDefault();
return Json(firstitem, JsonRequestBehavior.AllowGet);
}
}
如何正确计算差异
答案 0 :(得分:0)
你可以使用
获得两次的差异TimeSpan duration = DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime));
答案 1 :(得分:0)
您可以使用“小时”,“分钟”和“秒”属性,并根据这些值构建新的DateTime,这将是您所需要的差异。或者你可以用0小时,0分钟和0秒创建新的DateTime并进行减法。
答案 2 :(得分:0)
您可以按照自己的意愿进行计算或通过其他答案进行描述,但在结果上使用.Duration()
。
方法Duration
将返回绝对结果而非负数结果。
您的四行代码:
public TimeSpan? FirstStartDifference
{
get
{
if (!CurDateTime.HasValue)
{
return null
}
return (CurDateTime - DateTime.Today).Duration();
}
}
如果只想从DateTime
对象获取日期值,只需使用Date
属性而不是创建新属性。
e.g。
var myDateTime = DateTime.Now;
var myDate = myDateTime.Date;
答案 3 :(得分:0)
所以,你从DateTime.Today减去你的CurDateTime,即10月18日上午8:05:38,这是今天00:00的日期。 这当然会以负值结束,因为CurDateTime小于今天的日期。
您需要从CurDateTime的午夜日期时间中减去它。 像这样:
var midnight = new DateTime(CurDateTime.Year, CurDateTime.Month, CurDateTime.Day, 00, 00, 00);
var difference = CurDateTime - midnight;
var inMin = difference.TotalMinutes;
在你的情况下:
[NotMapped]
public TimeSpan? FirstStartDifference
{
get
{
if(CurDateTime != null)
{
var midnight = new DateTime(CurDateTime.Year, CurDateTime.Month, CurDateTime.Day, 00, 00, 00);
var difference = CurDateTime - midnight
return difference;
}
return null;
}
}