[C#基础] 得到指定周数的开始和结束日期
来源:互联网 发布:娇喘恶搞软件下载 编辑:程序博客网 时间:2024/05/21 01:55
得到指定周数的开始和结束日期#region 得到指定周数的开始和结束日期
public struct WeekRange
...{
public DateTime BeginDate, EndDate;
}
public static WeekRange GetWeekRange(int year, int weekNumber, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
...{
if (weekNumber > GetWeeksInYear(year, rule, firstDayOfWeek))
throw new Exception("Out of week number");
Calendar calendar = CultureInfo.InvariantCulture.Calendar;
DateTime firstDateOfYear = new DateTime(year, 1, 1);
int dayOfWeekIndex4ThisYearFirstDate = (int)calendar.GetDayOfWeek(firstDateOfYear);
int firstDayOfWeekIndex = (int)firstDayOfWeek;
int lastDayOfWeekIndex = firstDayOfWeekIndex + 6;
WeekRange weekRange;
int addDays, days;
//1月1日 + days = 周的最后一天
if (dayOfWeekIndex4ThisYearFirstDate < firstDayOfWeekIndex)
days = firstDayOfWeekIndex - dayOfWeekIndex4ThisYearFirstDate - 1;
else
days = lastDayOfWeekIndex - dayOfWeekIndex4ThisYearFirstDate;
switch (rule)
...{
case CalendarWeekRule.FirstDay:
if (weekNumber == 1)
...{
weekRange.EndDate = firstDateOfYear.AddDays(days);
weekRange.BeginDate = weekRange.EndDate.AddDays(-6);
}
else
...{
addDays = days + 1 + (weekNumber - 2) * 7;
weekRange.BeginDate = firstDateOfYear.AddDays(addDays);
weekRange.EndDate = weekRange.BeginDate.AddDays(6);
}
break;
case CalendarWeekRule.FirstFourDayWeek:
default:
if (days + 1 >= 4)
...{
if (weekNumber == 1)
...{
weekRange.EndDate = firstDateOfYear.AddDays(days);
weekRange.BeginDate = weekRange.EndDate.AddDays(-6);
}
else
...{
addDays = days + 1 + (weekNumber - 2) * 7;
weekRange.BeginDate = firstDateOfYear.AddDays(addDays);
weekRange.EndDate = weekRange.BeginDate.AddDays(6);
}
}
else
...{
addDays = days + 1 + (weekNumber - 1) * 7;
weekRange.BeginDate = firstDateOfYear.AddDays(addDays);
weekRange.EndDate = weekRange.BeginDate.AddDays(6);
}
break;
case CalendarWeekRule.FirstFullWeek:
if (dayOfWeekIndex4ThisYearFirstDate == firstDayOfWeekIndex)
addDays = (weekNumber - 1) * 7;
else
addDays = days + 1 + (weekNumber - 1) * 7;
weekRange.BeginDate = firstDateOfYear.AddDays(addDays);
weekRange.EndDate = weekRange.BeginDate.AddDays(6);
break;
}
return weekRange;
}
public static WeekRange GetWeekRange(int year, int weekNumber)
...{
return GetWeekRange(year, weekNumber, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
}
public static int GetWeeksInYear(int year, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
...{
Calendar calendar = CultureInfo.InvariantCulture.Calendar;
DateTime NextYearFirstDate = new DateTime(year + 1, 1, 1);
DateTime ThisYearLastDate = NextYearFirstDate.AddDays(-1);
int count = calendar.GetWeekOfYear(ThisYearLastDate, rule, firstDayOfWeek);
if (NextYearFirstDate.DayOfWeek != firstDayOfWeek)
count--;
return count;
}
public static int GetWeeksInYear(int year)
...{
return GetWeeksInYear(year, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
}
#endregion
public struct WeekRange
...{
public DateTime BeginDate, EndDate;
}
public static WeekRange GetWeekRange(int year, int weekNumber, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
...{
if (weekNumber > GetWeeksInYear(year, rule, firstDayOfWeek))
throw new Exception("Out of week number");
Calendar calendar = CultureInfo.InvariantCulture.Calendar;
DateTime firstDateOfYear = new DateTime(year, 1, 1);
int dayOfWeekIndex4ThisYearFirstDate = (int)calendar.GetDayOfWeek(firstDateOfYear);
int firstDayOfWeekIndex = (int)firstDayOfWeek;
int lastDayOfWeekIndex = firstDayOfWeekIndex + 6;
WeekRange weekRange;
int addDays, days;
//1月1日 + days = 周的最后一天
if (dayOfWeekIndex4ThisYearFirstDate < firstDayOfWeekIndex)
days = firstDayOfWeekIndex - dayOfWeekIndex4ThisYearFirstDate - 1;
else
days = lastDayOfWeekIndex - dayOfWeekIndex4ThisYearFirstDate;
switch (rule)
...{
case CalendarWeekRule.FirstDay:
if (weekNumber == 1)
...{
weekRange.EndDate = firstDateOfYear.AddDays(days);
weekRange.BeginDate = weekRange.EndDate.AddDays(-6);
}
else
...{
addDays = days + 1 + (weekNumber - 2) * 7;
weekRange.BeginDate = firstDateOfYear.AddDays(addDays);
weekRange.EndDate = weekRange.BeginDate.AddDays(6);
}
break;
case CalendarWeekRule.FirstFourDayWeek:
default:
if (days + 1 >= 4)
...{
if (weekNumber == 1)
...{
weekRange.EndDate = firstDateOfYear.AddDays(days);
weekRange.BeginDate = weekRange.EndDate.AddDays(-6);
}
else
...{
addDays = days + 1 + (weekNumber - 2) * 7;
weekRange.BeginDate = firstDateOfYear.AddDays(addDays);
weekRange.EndDate = weekRange.BeginDate.AddDays(6);
}
}
else
...{
addDays = days + 1 + (weekNumber - 1) * 7;
weekRange.BeginDate = firstDateOfYear.AddDays(addDays);
weekRange.EndDate = weekRange.BeginDate.AddDays(6);
}
break;
case CalendarWeekRule.FirstFullWeek:
if (dayOfWeekIndex4ThisYearFirstDate == firstDayOfWeekIndex)
addDays = (weekNumber - 1) * 7;
else
addDays = days + 1 + (weekNumber - 1) * 7;
weekRange.BeginDate = firstDateOfYear.AddDays(addDays);
weekRange.EndDate = weekRange.BeginDate.AddDays(6);
break;
}
return weekRange;
}
public static WeekRange GetWeekRange(int year, int weekNumber)
...{
return GetWeekRange(year, weekNumber, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
}
public static int GetWeeksInYear(int year, CalendarWeekRule rule, DayOfWeek firstDayOfWeek)
...{
Calendar calendar = CultureInfo.InvariantCulture.Calendar;
DateTime NextYearFirstDate = new DateTime(year + 1, 1, 1);
DateTime ThisYearLastDate = NextYearFirstDate.AddDays(-1);
int count = calendar.GetWeekOfYear(ThisYearLastDate, rule, firstDayOfWeek);
if (NextYearFirstDate.DayOfWeek != firstDayOfWeek)
count--;
return count;
}
public static int GetWeeksInYear(int year)
...{
return GetWeeksInYear(year, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
}
#endregion
- [C#基础] 得到指定周数的开始和结束日期
- C#获取指定月指定周的日期范围 根据当前时间获取本月开始日期和结束日期
- C#获取指定月指定周的日期范围 根据当前时间获取本月开始日期和结束日期
- C#获取指定月指定周的日期范围 根据当前时间获取本月开始日期和结束日期
- JAVA得到一个指定日期范围内每天的开始时间和结束时间
- 当前日期得到本周的开始和结束日期
- 当前日期得到本周的开始和结束日期
- 当前日期得到本周的开始和结束日期
- .net 获取周数和周的开始、结束日期
- 获取上月、上年、本月、本周、上周、指定年指定周、的开始日期和结束日期
- 得到一个月的开始和结束日期
- 根据今天的日期或者传入的日期得到本日所在周的开始日期和结束日期
- [C#]获取某年指定周的开始日期和结束日期的通用方法
- [C#]获取某年指定周的开始日期和结束日期的通用方法
- PHP计算指定日期所在周的开始和结束日期的方法
- PHP计算指定日期所在周的开始和结束日期
- 指定开始和结束日期循环的shell脚本
- C#得到系统进程和结束某个指定的进程
- 经典的25句话 http://www.leelay.com/read.php/136.htm
- 更新数据库的几次错误
- DBGRIDEh
- 使用struts+spring+hibernate 组装web应用
- oracle中的exists
- [C#基础] 得到指定周数的开始和结束日期
- 全球公认经典《Programming Ruby 中文版,第2版》全国发行!
- spring + struts + hibernate(ssh)开发记录.
- 在GridView中使用三目运算符应注意的问题
- Log4j 学习[转]
- dephi2007發佈會觀感
- ADO.NET数据库访问入门
- [DOC]XP蓝屏出错代码
- 面向对象学习体会