如何根据当前日期获取周一至周六的完整工作周(C#实现)
实现根据日期获取周一至周六的工作周
核心逻辑
- 若输入日期为周日,工作周为下周一至下周六
- 若输入日期为周一至周六,工作周为当前周的周一至周六
C# 代码实现
using System; public static class WorkWeekHelper { // 返回工作周的开始(周一)和结束(周六)日期 public static (DateTime Start, DateTime End) GetWorkWeek(DateTime date) { DateTime startOfWeek; if (date.DayOfWeek == DayOfWeek.Sunday) { // 周日的工作周从下周一启动 startOfWeek = date.AddDays(1); } else { // 计算当前日期到周一的偏移量,如周二减1天、周三减2天 int daysToSubtract = (int)date.DayOfWeek - (int)DayOfWeek.Monday; startOfWeek = date.AddDays(-daysToSubtract); } // 周六为周一往后推5天 DateTime endOfWeek = startOfWeek.AddDays(5); // 仅保留日期部分,剔除时分秒干扰 return (startOfWeek.Date, endOfWeek.Date); } // 示例调用 public static void Main() { // 测试用例1:2022.11.22(周二) DateTime testDate1 = new DateTime(2022, 11, 22); var week1 = GetWorkWeek(testDate1); Console.WriteLine($"{week1.Start:yyyy.MM.dd} - {week1.End:yyyy.MM.dd}"); // 输出:2022.11.21 - 2022.11.26 // 测试用例2:2022.11.27(周日) DateTime testDate2 = new DateTime(2022, 11, 27); var week2 = GetWorkWeek(testDate2); Console.WriteLine($"{week2.Start:yyyy.MM.dd} - {week2.End:yyyy.MM.dd}"); // 输出:2022.11.28 - 2022.12.03 } }
代码说明
- 借助
DayOfWeek枚举判断日期所属星期,对周日做特殊处理 - 通过日期偏移量快速定位周一,再通过固定天数偏移得到周六
- 调用
Date属性剥离时分秒,确保返回结果仅包含年月日信息
内容的提问来源于stack exchange,提问作者koogel
相关产品推荐
相关产品推荐

