Каков был бы наиболее точный способ расчета времени в этом случае?
Привет!
Я работаю над системой отслеживания времени, которую хочу использовать в приложении MVC 5.
Вот что у меня есть до сих пор:
Мой (упрощенный) класс ClockInOut. cs
public Guid Id { get; set; } public DateTime ClockIn { get; set; } public DateTime ClockOut { get; set; } public TimeSpan Duration { get; set; }
Теперь, на мой взгляд, у пользователя есть две кнопки. Часы приходят и уходят.
Это действия контроллера:
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); }
Теперь то, что будет дальше, - это то, что меня не устраивает:
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 минуты - что сейчас не так уж плохо. Но представьте себе, что у вас есть целый месяц данных, и он просто округляется до хорошего количества минут - человек, проверяющий время в конце месяца, может запутаться.
Так что моя причина для того, чтобы спросить - помилуй мой код, он, вероятно, не очень хорош, лол, - но в любом случае, как бы я получил точную иллюстрацию различных времен.
Надеюсь, у вас есть какие-то предложения....
Заранее спасибо :)
Пол