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

如何获取以周一为周起始日的当年当前周数?

按周一为周起始计算当年周数的实现方法

你现有代码默认调用了系统区域设置的周规则和周起始日,只需要修改GetWeekOfYear方法的后两个入参,显式指定规则即可实现周一为周起始的需求:

  • 显式指定周起始日为DayOfWeek.Monday,不受系统默认区域配置影响
  • 可按需选择周计算规则:
    • 若需要符合ISO 8601国际标准周数(每年第一个包含至少4天的周为第1周),使用CalendarWeekRule.FirstFourDayWeek
    • 若要求第一周必须是完整的7天、从第一个周一开始计算,使用CalendarWeekRule.FirstFullWeek
    • 若要求每年1月1日所在的周即为第1周,使用CalendarWeekRule.FirstDay

调整后的示例代码

Date_Time_Info = DateTimeFormatInfo.CurrentInfo
Calendar = Date_Time_Info.Calendar
// 示例:按ISO 8601标准、周一为周起始计算当前周数
int currentWeekOfYear = Calendar.GetWeekOfYear(
    DateTime.Now, 
    CalendarWeekRule.FirstFourDayWeek, 
    DayOfWeek.Monday
)

可选:ISO 8601周数跨年兼容逻辑

如果你的业务需要严格符合ISO 8601标准,需要额外处理跨年特殊情况(例如12月31日可能属于下一年第1周、1月1日可能属于上一年第52/53周),可使用如下逻辑同时获取周数对应的ISO年份:

DateTime currentDate = DateTime.Now;
Calendar calendar = CultureInfo.InvariantCulture.Calendar;

// 修正跨年日期的归属年份判断
DateTime dateForYearCalc = currentDate.AddDays(3 - (int)((currentDate.DayOfWeek + 6) % 7));
int isoYear = dateForYearCalc.Year;
int isoWeekOfYear = calendar.GetWeekOfYear(currentDate, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 16:27:04