查找表中的日期和午夜之间的区别(ASP.NET MVC)

时间:2017-10-23 11:30:01

标签: c# asp.net asp.net-mvc

我有数据表

这是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);
        }
    }

如何正确计算差异

4 个答案:

答案 0 :(得分:0)

你可以使用

获得两次的差异
TimeSpan duration = DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime));

答案 1 :(得分:0)

您可以使用“小时”,“分钟”和“秒”属性,并根据这些值构建新的DateTime,这将是您所需要的差异。或者你可以用0小时,0分钟和0秒创建新的DateTime并进行减法。

Here is working example

答案 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;
    }
 }