如何在C#中设置属性以自动打印当前周的周一日期?
在C#中获取并自动打印当前周周一日期的实现方法
问题分析
需求是自动获取并打印当前周的周一日期,原代码存在两处问题:
- 扩展方法
MondayOfCurrentWeek未使用传入的dt参数,固定依赖DateTime.Now,丢失了扩展方法的灵活性; - 扩展方法调用方式错误,扩展方法需通过
DateTime实例调用,而非类名直接调用。
修正后的实现方案
1. 正确的扩展方法(支持任意日期获取所在周的周一)
public static class DateTimeExtensions { // 扩展方法:获取指定日期所在周的周一 public static DateTime MondayOfCurrentWeek(this DateTime dt) { // DayOfWeek枚举中周日为0、周一为1,计算日期偏移量 int offset = (int)dt.DayOfWeek - (int)DayOfWeek.Monday; // 若当前是周日,偏移量为-1,需调整为+6(周日属于上一周周一之后第6天) if (offset < 0) offset += 7; return dt.AddDays(-offset).Date; // 仅保留日期部分,去除时分秒 } }
2. 实现自动返回周一日期的属性
如果要在Document类中添加属性,自动返回当前周的周一,可编写如下代码:
public class Document { // 只读属性:返回当前系统时间所在周的周一 public DateTime CurrentWeekMonday => DateTime.Now.MondayOfCurrentWeek(); }
3. 调用并打印结果
var document = new Document(); Console.WriteLine($"Document date - {document.CurrentWeekMonday}");
补充说明
- 扩展方法必须放在静态类中才能生效;
- 使用
Date属性可以剥离时间部分,仅保留纯日期; - 代码适配了
DayOfWeek的枚举规则,避免周日场景下的计算错误。
内容的提问来源于stack exchange,提问作者Veronika Novikova
相关产品推荐
相关产品推荐

