在这种情况下,计算时间的最准确方法是什么? [英] What would be the most accurate way to calculate time in this case?

查看:102
本文介绍了在这种情况下,计算时间的最准确方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨!

我正在研究一个我想在MVC 5应用程序中使用的时间跟踪系统。

这是我到目前为止所拥有的: br $>


我的(简化)类ClockInOut.cs

Hi!
I'm working on a time tracking system which I want to use in a MVC 5 app.
Here is what I have so far:

My (simplified) class ClockInOut.cs

public Guid Id { get; set; }
public DateTime ClockIn { get; set; }
public DateTime ClockOut { get; set; }
public TimeSpan Duration { get; set; }



现在在我看来,用户有两个按钮。时钟输入和时钟输出。



这些是控制器操作:


Now in my view the user has two buttons. Clock in and clock out.

These are the controller actions:

public ActionResult ClockIn()
{
    var model = new ZeitBuchungDto()
                {
                    Id = Guid.NewGuid(),
                    Kommen = DateTime.Now,
                    Gehen = new DateTime(9998,12,31,0,0,0),
                };
    
    var convertToEntity = Mapper.Map<ZeitBuchungDto, ZeitBuchung>(model);
    
    zeitContext.ZeitBuchung.Add(convertToEntity);
    zeitContext.SaveChanges();

    return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}




public ActionResult ClockOut()
{
    using (var db = new ZeitContext())
          {
              db.ZeitBuchung.Attach(convertToEntity);
              convertToEntity.Gehen = DateTime.Now;
              convertToEntity.AktuellGebucht = false;
              convertToEntity.Gesamtdauer = convertToEntity.Gehen - zeitKommen;
              db.Entry(convertToEntity).Property(x => x.Gesamtdauer).IsModified = true;
              db.Entry(convertToEntity).Property(x => x.Gehen).IsModified = true;
              db.SaveChanges();
           }
    return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}



现在接下来的是我不满意的地方:


Now what's coming next is the point with which I'm not satisfied:

private IEnumerable<TimeSpan> GetTotalTime()
{
    var totalTime = myContext.MyEntity.Select(m => m.Duration).AsEnumerable();

    return totalTime;
}




public ActionResult Index()
{
    IEnumerable<TimeSpan> time = GetTotalTime();
    var totalTime = time.Sum(s => s.Ticks);
    var convertedTime = TimeSpan.FromTicks(totalTime).ToString(@"hh\:mm");

    ViewBag.Hours = convertedTime;

    return View(model);
}





我的尝试:



实际上所有这些东西都有效,但我觉得这种转换是非常不准确的。



在我的测试中,我注意到有时我看到的数字没有加起来。可能只是一个四舍五入的问题,但我仍然是编程的新手,所以我无法真正判断。



我想要的是准确的视图。看看这张照片:

http://fs5.directupload.net/images/170905/zhvrlb4j.png

我把圆圈放在哪里,我认为这只是将其调整为1分钟 - 现在还不错。但是想象一下你有一整个月的数据,而且只需要很长的时间 - 在月底检查时间的人可能会感到困惑。



所以我问的理由 - 怜悯我的代码,它可能不是很好lol - 但无论如何,我怎么能得到不同时间的准确说明。



希望你有一些建议....



提前致谢:)



Paul



What I have tried:

Actually all this stuff works but I have a feeling this conversion is pretty inaccurate.

Throughout my tests I noticed that sometimes the numbers I see don't add up. Might be just a rounding issue but I'm still pretty new to programming so I can't really judge on that.

What I would like to have is an accurate view. Take a look at this pic:
http://fs5.directupload.net/images/170905/zhvrlb4j.png
Where I put the circle, I assume this just got rounded up to 1 minute - which isn't too bad right now. But imagine you have a whole month of data and it just rounds up to a good amount of minutes - the person checking the times at the end of the month might get confused.

So my reason for asking - have mercy with my code, it's probably not really good lol - but anyway, how would I get an accurate illustration of the various times.

Hope you have some suggestions....

Thanks in advance :)

Paul

推荐答案

EF中的TimeSpan映射到SQL Server中的Time字段。那个时间字段只能保存最多24小时的值,因为TimeSpan可以超越它。



您所看到的舍入仅在UI中,而不是在数据库中的TimeSpan属性或时间字段。



您所看到的舍入不会累积,因为它实际上并不存在。添加所有TimeSpans的数学运算将处理非舍入值,而不是舍入显示的值。
A TimeSpan in EF maps to a Time field in SQL Server. That time field can only hold values up to 24 hours where as a TimeSpan can go beyond that.

The rounding you're seeing is only in the UI, not in the TimeSpan property or Time field in the database.

The rounding you're seeing will NOT accumulate because it's not really there. The math to add up all of the TimeSpans will work on the non-rounded values, not the rounded displayed value.


这篇关于在这种情况下,计算时间的最准确方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆