如何计算员工列表总工作时长(工作时长为字符串类型)
计算员工列表的总工作时长
要计算员工列表的总工作时长,核心是将字符串格式的时长转换为可计算的时间类型后累加,具体步骤和实现如下:
核心思路
- 将每个员工的
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
相关产品推荐
相关产品推荐

