You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算员工列表总工作时长(工作时长为字符串类型)

计算员工列表的总工作时长

要计算员工列表的总工作时长,核心是将字符串格式的时长转换为可计算的时间类型后累加,具体步骤和实现如下:

核心思路

  • 将每个员工的HoursWorked字符串(格式为HH:mm)解析为TimeSpan类型,该类型原生支持时间的加减运算。
  • 根据需求选择全局所有员工总时长或者按员工分组统计单人工时。

代码实现

1. 全局所有员工总时长计算

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        List<Employee> list = new();
        list.Add(new Employee{EmployeeName = "Test1", HoursWorked = "2:30"});
        list.Add(new Employee{EmployeeName = "Test1", HoursWorked = "3:30"});
        list.Add(new Employee{EmployeeName = "Test2", HoursWorked = "1:45"});

        TimeSpan totalGlobalHours = TimeSpan.Zero;
        foreach (var emp in list)
        {
            // 安全解析字符串,避免格式错误导致崩溃
            if (TimeSpan.TryParse(emp.HoursWorked, out TimeSpan singleHours))
            {
                totalGlobalHours += singleHours;
            }
            else
            {
                Console.WriteLine($"无法解析员工 {emp.EmployeeName} 的工作时长:{emp.HoursWorked}");
            }
        }

        Console.WriteLine($"所有员工总工作时长:{totalGlobalHours.ToString(@"hh\:mm")}");
    }
}

public class Employee
{
    public string EmployeeName { get; set; }
    public string HoursWorked { get; set; }
}

2. 按员工分组统计单人工时

如果需要单独统计每个员工的总工时,可以用LINQ分组实现:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        List<Employee> list = new();
        list.Add(new Employee{EmployeeName = "Test1", HoursWorked = "2:30"});
        list.Add(new Employee{EmployeeName = "Test1", HoursWorked = "3:30"});
        list.Add(new Employee{EmployeeName = "Test2", HoursWorked = "1:45"});

        var singleEmployeeTotal = list
            .GroupBy(emp => emp.EmployeeName)
            .Select(group => new 
            {
                EmployeeName = group.Key,
                TotalMinutes = group.Sum(emp => 
                {
                    TimeSpan.TryParse(emp.HoursWorked, out TimeSpan hours);
                    return hours.TotalMinutes;
                })
            })
            .Select(result => new 
            {
                result.EmployeeName,
                FormattedTotal = TimeSpan.FromMinutes(result.TotalMinutes).ToString(@"hh\:mm")
            });

        foreach (var item in singleEmployeeTotal)
        {
            Console.WriteLine($"员工 {item.EmployeeName} 总工作时长:{item.FormattedTotal}");
        }
    }
}

public class Employee
{
    public string EmployeeName { get; set; }
    public string HoursWorked { get; set; }
}

关键细节说明

  • 用TimeSpan.TryParse替代TimeSpan.Parse,能避免因非法格式字符串导致的程序崩溃,同时可捕获解析失败的异常情况。
  • 输出时用ToString(@"hh\:mm")将TimeSpan格式化为HH:mm的字符串,保持和输入一致的展示格式;若工时超过24小时,可改用ToString(@"dd\.hh\:mm")显示天数。

内容的提问来源于stack exchange,提问作者Rod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:35:57