【问题标题】:Calculate Numbers of hours worked from 10 duration value in C#从 C# 中的 10 持续时间值计算工作小时数
【发布时间】:2014-09-19 08:28:36
【问题描述】:

我的数据库中有 10 条记录,包括开始时间和结束时间。我能够使用 SUBTRACT 函数计算持续时间值。现在我正在运行一个循环,我想根据持续时间值(或开始值和结束值)计算工作总小时数。

我尝试了 AddHours 和 Add 函数,但它给出了错误。不确定我是否正确使用它。

Datetime TotalHours = TotalHours.add(Duration)

Datetime TotalHours = TotalHours.addHours(Duration)

这就是我所做的。导致转换错误。

我尝试编写一个函数,通过将 60 分钟加到几小时后手动计算时间,但必须有更简单的方法。

【问题讨论】:

  • TotalHoursDuration 到底是什么?由于 C# 区分大小写,因此它们可能是 AddAddHours

标签: c# datetime timespan


【解决方案1】:

假设DurationTimeSpan

var durations = ....
var total = new TimeSpan();
foreach (var duration in durations) // assuming durations is a collection of all the durations you have calculated
     total = total.Add(duration);

Console.WriteLine(total.Hours); // "whole" hours, try TotalHours for fractional

Console.WriteLine((int)total.TotalHours); // whole amount of total hours, ie 1 day + 3 h = 27 h

【讨论】:

  • 这很好,但有一个小问题。因此,当总小时数超过 24 时,它给我的值为 1.03:00:00,即一天。三个我们的时间:零分钟:零秒。现在我做了拆分字符串,并能够按 1*24 小时加上 3 小时显示总小时数,但想知道在上面的代码中有什么方法可以做到这一点吗?谢谢。
  • (Convert.ToInt32(total.TotalHours) + ":" + Convert.ToInt32(total.Minutes)).ToString();这行得通!谢谢!
【解决方案2】:

您可以只使用TimeSpan 的实例来累积所有持续时间。

例如:

var durations = // Your collection of TimeSpan items goes here.

var totalDuration = new TimeSpan();

foreach (var duration in durations)
    totalDuration += duration;

double totalHours = totalDuration.TotalHours; // Note: Includes fractional hours.

【讨论】:

  • 谢谢!您有与弗林德伯格相同的解决方案。最后,我将字符串中的总小时数转换为显示,因此不需要将其转换为双倍。
【解决方案3】:

从你所说的你想要的时间数。 Subtract 返回 TimespanTimespan 有一个属性 Hours。这将为您提供经过的小时数。

var TotalHours = Duration.Hours;

【讨论】:

    【解决方案4】:

    使用 TimeSpan 类,例如:

    public class FromTo
    {
        public DateTime From {get; set;}
        public DateTime To {get; set;}
        //other properties of your class
    }
    

    现在获取包含开始日期和结束日期的对象列表。之后,您可以在循环中添加结果:

    public TimeSpan CalculateWorkTime(List<FromTo> fromto)
    {
        TimeSpan sum = new TimeSpan();
        fromto.ForEach(p => 
        {
            sum += (p.To - p.From);
        });
        return sum;
    }
    

    告诉我它是否有效。问候;)

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 2022-11-01
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多