c#获取当前日期是今年第几周

来自:http://blog.youkuaiyun.com/allen3010/article/details/6828643

/// <summary>
        /// 取指定日期是一年中的第几周
        /// </summary>
        /// <param name="dt">给定的日期</param>
        /// <returns>数字 一年中的第几周</returns>
        private static int DatePart(DateTime dt)
        {
            int weeknow = Convert.ToInt32(dt.DayOfWeek);//今天星期几
            int daydiff = (-1) * (weeknow + 1);//今日与上周末的天数差
            int days = System.DateTime.Now.AddDays(daydiff).DayOfYear;//上周末是本年第几天
            int weeks = days / 7;
            if (days % 7 != 0)
            {
                weeks++;
            }
            //此时,weeks为上周是本年的第几周
            return (weeks + 1);
        }

找的上面这个函数可以获取,但是第一周的处理不好,显示的是53周而不是1周

=================分割线=====================

后又根据本人最近的思路,写下了如下的程序,解决了上面第一周处理不好的地方,注释连着看就是我求解的思路算法

private static int GetWeekOfYear()
        {
            //一.找到第一周的最后一天(先获取1月1日是星期几,从而得知第一周周末是几)
            int firstWeekend=7-Convert.ToInt32(DateTime.Parse(DateTime.Today.Year + "-1-1").DayOfWeek);
           
            //二.获取今天是一年当中的第几天
            int currentDay = DateTime.Today.DayOfYear;

            //三.(今天 减去 第一周周末)/7 等于 距第一周有多少周 再加上第一周的1 就是今天是今年的第几周了
            //    刚好考虑了惟一的特殊情况就是,今天刚好在第一周内,那么距第一周就是0 再加上第一周的1 最后还是1
            return Convert.ToInt32(Math.Ceiling((currentDay - firstWeekend) / 7.0)) + 1;
        }

 

C#获取当前日期属于本年的第几周,可以通过多种方式实现,具体取决于对“周”的定义。常见的定义方式包括: 1. **第一种方式**:以一年中的第一天所在的周作为第一周(即使该周不足7天)。 2. **第二种方式**:以周一为一周的开始,将全年划分为完整的周(ISO 8601 标准)。 3. **第三种方式**:以某一年的第一周从某一天开始计算(如从星期日或星期一开始)。 以下是一个基于 `GregorianCalendar` 类的实现方法,它使用 `CalendarWeekRule.FirstDay` 和指定一周的起始日(如 `DayOfWeek.Monday`)来计算当前日期是本年的第几周: ```csharp using System; using System.Globalization; public class WeekCalculator { public static int GetWeekOfYear(DateTime date) { GregorianCalendar gregorianCalendar = new GregorianCalendar(); int weekOfYear = gregorianCalendar.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Monday); return weekOfYear; } public static void Main() { DateTime currentDate = DateTime.Today; int week = GetWeekOfYear(currentDate); Console.WriteLine($"当前日期 {currentDate.ToShortDateString()} 是本年的第 {week} 周。"); } } ``` 上述代码中,`CalendarWeekRule.FirstDay` 表示以一年的第一天作为第一周的开始,`DayOfWeek.Monday` 表示一周从星期一开始[^5]。 如果希望使用 ISO 8601 标准(即第一周必须包含至少4天,且一周从星期一开始),则需要额外的逻辑处理,例如: ```csharp public static int GetIso8601WeekOfYear(DateTime date) { DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(date); if (day == DayOfWeek.Sunday) { day = DayOfWeek.Saturday; } else { day -= DayOfWeek.Monday; } int dayNumber = date.DayOfYear + 6 - ((int)day); int weeks = dayNumber / 7; if (weeks == 0) { // 如果当前周属于上一年 weeks = GetIso8601WeekOfYear(date.AddDays(-7)); } return weeks; } ``` ### 使用示例 假设当前日期是 `2023-01-02`,根据 ISO 8601 标准,该日期是 2023 年的第一周;而根据 `CalendarWeekRule.FirstDay` 规则,如果 `1月1日` 是星期日,则该日期可能属于第 1 周。 ### 总结 - 使用 `GregorianCalendar.GetWeekOfYear` 可以快速获取当前日期的周数。 - 如果需要符合 ISO 8601 标准,则需额外处理逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值