【问题标题】:How to get Total hours in c#, it could be more than 24hours [closed]如何在 c# 中获取总小时数,可能超过 24 小时 [关闭]
【发布时间】:2021-03-29 00:40:01
【问题描述】:

我需要一个月的总工作时间

ex : 7:30 + 8:00 + 6:30 +9:30 its 31:30 我需要回答 31:30 我试过 TimeSpan

 // create new timespan
  TimeSpan total = TimeSpan.Zero;

 // iterate through items
  foreach (var count in model.Items)
   {
      TimeSpan totalDonationSum = TimeSpan.Parse(count.Hours);
      total += totalDonationSum;
   }

我得到了 1.06:21:00 的总计(如果超过 24 小时),我不想这样

让我帮忙,如果我做错了什么,或者我会做与此不同的事情

【问题讨论】:

  • Timespan 有一个 TotalHours 属性。
  • 我该如何使用,在上面的代码中?你能帮忙吗,我试过了,但出现语法错误
  • 我想您可能想将时间转换为十进制,因为 31:00 在 Datetime 中没有任何意义,请参阅此处如何转换为十进制:stackoverflow.com/questions/1834271/…
  • 是的,但如果我得到像 31:30 这样的总小时数,那将是 31.5,所以很难理解最终用户数的格式
  • 是的,你做错了什么,是的,可以用不同的方法来做。如果您需要更详细的答案,请参考minimal reproducible example 并更新问题。

标签: c# model-view-controller timestamp timespan


【解决方案1】:

这样你就可以分开小时和分钟:

// create new timespan
TimeSpan total = TimeSpan.Zero;

// iterate through items
foreach (var count in model.Items)
{
    TimeSpan totalDonationSum = TimeSpan.Parse(count.Hours);
    total += totalDonationSum;
}

// calculate
int hours = (int)total.TotalHours;
int minutes = total.Minutes;

// display
string time = hours.ToString("00") + ":" + minutes.ToString("00");

【讨论】:

  • 如果我在几分钟内得到 02,那么我得到唯一的 2,因为我们采用 INT ,任何其他获得价值的替代方法,例如 28:2 到 28:02
  • 你可以使用 integerValue.ToString("00");然后它将用前导零转换它。
【解决方案2】:

尽量用Minutes来计算,最后的格式是Hours。

这段代码应该可以帮助你:

int totalMinutes = 0;
foreach (var count in model.Items)
{
    DateTime totalDonationSum = DateTime.Parse(count.Hours);
    totalMinutes += (totalDonationSum.Hour*60) + totalDonationSum.Minute;
}

TimeSpan span = TimeSpan.FromMinutes(totalMinutes);
string hoursFormatThatYouWant = span.ToString(@"hh\:mm\:ss");

//If you use a console or you can change for MessageBox or Alert :)
Console.WriteLine("Total Hours:" + hoursFormatThatYouWant);

【讨论】:

    【解决方案3】:

    使用TimeSpan.TotalHours 属性。

    您可以使用 TimeSpan 执行算术运算以获取 TimeSpan 作为结果,然后像这样获取其 TotaHours 属性

    double totalHours = (TimeSpan.FromDays(1) + TimeSpan.FromHours(7)).TotalHours;
    

    totalHours 在这种情况下的值为 31。

    【讨论】:

      【解决方案4】:

      使用 TimeSpan.Hours 属性:

      // Create a TimeSpan value with a large number of ticks. 
      Console.Write("\n{0,-45}", "TimeSpan( 111222333444555 )"); 
      ShowTimeSpanProperties(new TimeSpan(111222333444555));
      
      Console.WriteLine("{0,-12}{1,8} {2,-18}{3,21:N3}", "Hours", interval.Hours, "TotalHours", interval.TotalHours);
      

      来源:https://docs.microsoft.com/en-us/dotnet/api/system.timespan.hours?view=net-5.0

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多