C#获取指定年份指定周数的开始日期和结束日期

去年的时候写了一个统计功能,是按周统计的。

利用用Sql中的DATEPART(WK,CreateTime),datepart(week , '2013-01-01'), SET DATEFIRST 7 等方法获取当前周数结合Group by实现的。

在前台显示的时候从网上找了一段代码标注了每周的起始日期和结束日期,当时也没怎么注意,可昨天收到邮件反馈说“未来日期的统计结果也出来了”,于是打开统计后台一看,2013年第10周,赫然显示着3-11到3-17,可是查询年当天才3号啊。

也许我从网上找的那段代码有问题,也许我不会使用传错了参数,总之这个周数和起始日期与数据库的对应不上了。

然后我就自己改写出来一个跟MS Sql数据库的默认设置对应的取指定年指定周开始和结束日期的方法。

代码的一部分来自原来从网上找的代码,经过我的加工跟之前的逻辑有些不一样了。

使用时候判断返回结果再使用,否则周期数错误时可能返回的日期有误。

代码如下:

 1         /// <summary>
 2         /// 获取指定周数的开始日期和结束日期,开始日期为周日
 3         /// </summary>
 4         /// <param name="year">年份</param>
 5         /// <param name="index">周数</param>
 6         /// <param name="first">当此方法返回时,则包含参数 year 和 index 指定的周的开始日期的 System.DateTime 值;如果失败,则为 System.DateTime.MinValue。</param>
 7         /// <param name="last">当此方法返回时,则包含参数 year 和 index 指定的周的结束日期的 System.DateTime 值;如果失败,则为 System.DateTime.MinValue。</param>
 8         /// <returns></returns>
 9         public static bool GetDaysOfWeeks(int year, int index, out DateTime first, out DateTime last)
10         {
11             first = DateTime.MinValue;
12             last = DateTime.MinValue;
13             if (year < 1700 || year > 9999)
14             {
15                 //"年份超限"
16                 return false;
17             }
18             if (index < 1 || index > 53)
19             {
20                 //"周数错误"
21                 return false;
22             }
23             DateTime startDay = new DateTime(year, 1, 1);  //该年第一天
24             DateTime endDay = new DateTime(year + 1, 1, 1).AddMilliseconds(-1);
25             int dayOfWeek = Convert.ToInt32(startDay.DayOfWeek);  //该年第一天为星期几
29             if (index == 1)
30             {
31                 first = startDay;
32                 if (dayOfWeek == 6)
33                 {
34                     last = first;
35                 }
36                 else
37                 {
38                     last = startDay.AddDays((6-dayOfWeek));
39                 }
40             }
41             else
42             {
43                 first = startDay.AddDays((7 - dayOfWeek) + (index - 2) * 7); //index周的起始日期
44                 last = first.AddDays(6);
45                 if (last > endDay)
46                 {
47                     last = endDay;
48                 }
49             }
50             if (first > endDay)  //startDayOfWeeks不在该年范围内
51             {
52                 //"输入周数大于本年最大周数";
53                 return false;
54             }            
55             return true;
56         }

修改后的统计效果图:

转载于:https://www.cnblogs.com/erdeni/archive/2013/03/05/GetDaysOfWeeks.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值