.net 取时间差 单位为分钟 去除周末以及非工作时间
时间: 2024-02-21 17:01:00 浏览: 114
以下是一个示例代码,它可以计算两个日期之间的时间差(单位为分钟),去除周末以及非工作时间。
```csharp
DateTime start = new DateTime(2021, 7, 1, 9, 0, 0); // 开始时间
DateTime end = new DateTime(2021, 7, 10, 17, 0, 0); // 结束时间
TimeSpan duration = end - start; // 时间差
int workingDays = 0;
int totalMinutes = (int)duration.TotalMinutes; // 总分钟数
for (DateTime date = start; date <= end; date = date.AddDays(1))
{
if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)
{
// 判断是否为工作日
TimeSpan workStart = new DateTime(date.Year, date.Month, date.Day, 9, 0, 0).TimeOfDay; // 上班时间
TimeSpan workEnd = new DateTime(date.Year, date.Month, date.Day, 17, 0, 0).TimeOfDay; // 下班时间
TimeSpan diff = workEnd - workStart; // 工作时间
// 判断是否为非工作时间
TimeSpan nonWorkingStart = new DateTime(date.Year, date.Month, date.Day, 12, 0, 0).TimeOfDay; // 午休开始时间
TimeSpan nonWorkingEnd = new DateTime(date.Year, date.Month, date.Day, 13, 0, 0).TimeOfDay; // 午休结束时间
if (totalMinutes >= (nonWorkingEnd - nonWorkingStart).TotalMinutes)
{
if (totalMinutes >= (nonWorkingEnd - workStart).TotalMinutes)
{
totalMinutes -= (int)(nonWorkingEnd - workStart).TotalMinutes;
}
else
{
break;
}
}
if (totalMinutes >= (int)diff.TotalMinutes)
{
workingDays++;
totalMinutes -= (int)diff.TotalMinutes;
}
else
{
break;
}
}
}
// 输出结果
Console.WriteLine("总共用时(分钟): {0}", (int)duration.TotalMinutes);
Console.WriteLine("去除周末和非工作时间后用时(分钟): {0},工作日数: {1}天", totalMinutes, workingDays);
```
这段代码会计算从 2021 年 7 月 1 日 9 点到 2021 年 7 月 10 日 17 点的时间差(单位为分钟),并去除周末以及非工作时间。在这个示例中,工作时间为每天的 9 点到 17 点,午休时间为每天的 12 点到 13 点。最后输出的结果包括总共用时和去除周末和非工作时间后的用时(单位为分钟)和工作日数。
阅读全文