C# 获取一年中指定的一周的开始日期和结束日期的通用方法
来源:互联网 发布:淘宝主图图标素材 编辑:程序博客网 时间:2024/05/27 20:21
根据日期获取周次 可以通过 DateTimeFormatInfo.CurrentInfo.Calendar.GetWeekOfYear(date,CalendarWeekRule rule,DayOfWeek day)方法。
而通过周次获取周的开始日期和结束日期似乎没有直接可以使用的方法。搜索到的方法没有能包含rule和day参数的,自己写了一个。
记得引用命名空间 System.Globalization.
/// <summary> /// 获取一年中指定的一周的开始日期和结束日期。 /// </summary> /// <param name="year">年(1到9999)</param> /// <param name="weeks">周(1到54) -因规则设置 存在54周,如CalendarWeekRule.FirstDay;DayOfWeek.Monday;2012-12-31;54周</param> /// <param name="weekrule">确定首周的规则</param> /// <param name="day">每周第一天的规则</param> /// <param name="first">返回指定周的开始日期,失败则返回System.DateTime.MinValue</param> /// <param name="last">返回指定周的结束日期,失败则返回System.DateTime.MaxValue</param> /// <returns>成功返回true,否则为false</returns> public bool GetDaysByWeek(int year, int weeks,CalendarWeekRule weekrule,DayOfWeek day,out DateTime first,out DateTime last) { //初始化out参数 first = DateTime.MinValue; last = DateTime.MaxValue; DateTime firstday = DateTime.MinValue; DateTime second = DateTime.MinValue; DateTime firstCurr = new DateTime(year,1,1);//当前年首日 DateTime FirstNext = new DateTime(year+1,1,1);//下一年首日 if (year < 1 | year > 9999) return false; if (weeks < 1 | weeks > 54) return false; //因规则设置 存在54周,排除非此种情况 if (DateTimeFormatInfo.CurrentInfo.Calendar.GetWeekOfYear(new DateTime(year, 12, 31), weekrule, day) < 54) { if (weeks == 54) return false; } //得到未经验证的周首日 int dayOfWeekFirst = (int)firstCurr.DayOfWeek; switch (day) { case DayOfWeek.Sunday: { first = firstCurr.AddDays((weeks - 1) * 7 - dayOfWeekFirst); firstday = firstCurr.AddDays((1 - 1) * 7 - dayOfWeekFirst); second = firstCurr.AddDays((2 - 1) * 7 - dayOfWeekFirst); } break; case DayOfWeek.Monday: { if (dayOfWeekFirst == 0) dayOfWeekFirst = 7; first = firstCurr.AddDays((weeks-1)*7-dayOfWeekFirst+1); firstday = firstCurr.AddDays((1 - 1) * 7 - dayOfWeekFirst+1); second = firstCurr.AddDays((2 - 1) * 7 - dayOfWeekFirst + 1); } break; case DayOfWeek.Tuesday: { if (dayOfWeekFirst == 0) dayOfWeekFirst = 7; if (dayOfWeekFirst == 1) dayOfWeekFirst = 8; first = firstCurr.AddDays((weeks-1)*7-dayOfWeekFirst+2); firstday = firstCurr.AddDays((1 - 1) * 7 - dayOfWeekFirst + 2); second = firstCurr.AddDays((2 - 1) * 7 - dayOfWeekFirst + 2); } break; case DayOfWeek.Wednesday: { if (dayOfWeekFirst == 0) dayOfWeekFirst = 7; if (dayOfWeekFirst == 1) dayOfWeekFirst = 8; if (dayOfWeekFirst == 2) dayOfWeekFirst = 9; first = firstCurr.AddDays((weeks-1)*7-dayOfWeekFirst+3); firstday = firstCurr.AddDays((1 - 1) * 7 - dayOfWeekFirst + 3); second = firstCurr.AddDays((2 - 1) * 7 - dayOfWeekFirst + 3); } break; case DayOfWeek.Thursday: { if (dayOfWeekFirst == 0) dayOfWeekFirst = 7; if (dayOfWeekFirst == 1) dayOfWeekFirst = 8; if (dayOfWeekFirst == 2) dayOfWeekFirst = 9; if (dayOfWeekFirst == 3) dayOfWeekFirst = 10; first = firstCurr.AddDays((weeks-1)*7-dayOfWeekFirst+4); firstday = firstCurr.AddDays((1 - 1) * 7 - dayOfWeekFirst + 4); second = firstCurr.AddDays((2 - 1) * 7 - dayOfWeekFirst + 4); } break; case DayOfWeek.Friday: { if (dayOfWeekFirst == 0) dayOfWeekFirst = 7; if (dayOfWeekFirst == 1) dayOfWeekFirst = 8; if (dayOfWeekFirst == 2) dayOfWeekFirst = 9; if (dayOfWeekFirst == 3) dayOfWeekFirst = 10; if (dayOfWeekFirst == 4) dayOfWeekFirst = 11; first = firstCurr.AddDays((weeks - 1) * 7 - dayOfWeekFirst + 5); firstday = firstCurr.AddDays((1 - 1) * 7 - dayOfWeekFirst + 5); second = firstCurr.AddDays((2 - 1) * 7 - dayOfWeekFirst + 5); } break; case DayOfWeek.Saturday: { if (dayOfWeekFirst == 0) dayOfWeekFirst = 7; if (dayOfWeekFirst == 1) dayOfWeekFirst = 8; if (dayOfWeekFirst == 2) dayOfWeekFirst = 9; if (dayOfWeekFirst == 3) dayOfWeekFirst = 10; if (dayOfWeekFirst == 4) dayOfWeekFirst = 11; if (dayOfWeekFirst == 5) dayOfWeekFirst = 12; first = firstCurr.AddDays((weeks - 1) * 7 - dayOfWeekFirst + 6); firstday = firstCurr.AddDays((1 - 1) * 7 - dayOfWeekFirst + 6); second = firstCurr.AddDays((2 - 1) * 7 - dayOfWeekFirst + 6); } break; default: break; } //周首日是上一年的情况。。 if (firstday.Year < year) { switch (weekrule) { case CalendarWeekRule.FirstDay: { if(weeks==1) first = firstCurr; } break; case CalendarWeekRule.FirstFullWeek: { first = first.AddDays(7);//顺延一周 second = second.AddDays(7); } break; case CalendarWeekRule.FirstFourDayWeek: if (firstCurr.Subtract(first).Days >3) //周首日距年首日不足4天则顺延一周 { first = first.AddDays(7); second = second.AddDays(7); } break; default: break; } } if (weeks == 1) { //第一周的天数可能不足7天,用第二周的第一天减去1s last = second.AddSeconds(-1); } else { //得到未经验证的周末日 last = first.AddDays(7).AddSeconds(-1); } //周末日是下一年日期的情况。。 if (last.Year > year) { switch (weekrule) { case CalendarWeekRule.FirstDay: last = FirstNext.AddSeconds(-1); break; case CalendarWeekRule.FirstFullWeek: break; case CalendarWeekRule.FirstFourDayWeek: if (FirstNext.Subtract(first).Days < 4) { first = first.AddDays(-7); last = last.AddDays(-7); } break; default: break; } } return true; }
DateTime first = DateTime.MinValue; DateTime last = DateTime.MaxValue; GetDaysByWeek(2013,53,CalendarWeekRule.FirstFourDayWeek,DayOfWeek.Monday,out first,out last); //first就是周开始日期;last就是周结束日期
0 0
- C# 获取一年中指定的一周的开始日期和结束日期的通用方法
- [C#]获取某年指定周的开始日期和结束日期的通用方法
- [C#]获取某年指定周的开始日期和结束日期的通用方法
- PHP获取一年中的每星期的开始日期和结束日期
- PHP获取一年中的每星期的开始日期和结束日期
- 根据开始日期和结束日期获取所有日期的方法
- php获取本周的开始日期和结束日期
- golang获取上月的开始日期和结束日期
- 获取某年第几周的开始日期和结束日期
- IOS 根据日期,获取该日期所在周,月,年的开始日期,结束日期 的方法,还有下一周或者上一周的时间
- C#获取指定月指定周的日期范围 根据当前时间获取本月开始日期和结束日期
- C#获取指定月指定周的日期范围 根据当前时间获取本月开始日期和结束日期
- C#获取指定月指定周的日期范围 根据当前时间获取本月开始日期和结束日期
- php获取指定日期的一周开始及结束日期,支持一周是从周几开始
- php获取指定日期的一周开始及结束日期,支持一周是从周几开始
- java获取当前周的(开始日期-结束日期)和 当前月(开始日期-结束日期)
- java获取当前周的(开始日期-结束日期)和 当前月(开始日期-结束日期)
- 计算一年有多少个周,每个周的开始日期和结束日期是什么
- orecle virtual box geneymotion无法开启问题
- 对象——创建对象
- C与CUDA混合编程的配置问题
- HDU1256画8
- Codeforces Round #323 (Div. 2)B. Robot's Task
- C# 获取一年中指定的一周的开始日期和结束日期的通用方法
- Android 自定义圆形头像
- GIT的使用
- C++中如何修改const变量 (指针)
- zsh切换bash bash切换zsh
- 补不manjaro系统
- Google Test 测试架构探究
- 数据归一化方法大全
- C语言的小知识(二)