在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近的一个 周报表 既需要C#求本周是今年的第几周 又需要在存储过程里 通过sql求。 在 sql里 有函数可以直接求出。但是在C#里 没有直接的属性或函数,必须自己来算。 C#里可以知道今天是本周的第几天,还可以知道今天是本年的第几天。这样我们就可以求出本周是今年的第几周。 有两种思路: 1、 可以先算出 上周末是哪天,然后算出上周是第几周,(算法是: 用7整除上周末在今年的天数 如果能被整除则 结果就是上周在今年的第几周,否则 结果+1 ) 最后再 + 1, 就是本周的顺序。 例如:
代码
private int DatePart(System.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); }
2、 先计算今年的1月1日是一周中的第几天,然后用 今天在今年的天数 - 它 + 7,最后直接 用7除这个数 有余数则+1 即为本周的顺序,整除则不加1。 代码就不列了。 在sql中,利用函数 DATEPART(week,getdate()) 直接得到结果。 需要注意的是: DATEPART(dw,getdate()) 得到的 weekday结果是 1--7 而 C# datetime1.DayOfWeek 得到的 是 0--6 不过,有一点他们是一样的 就是 Sunday 都是本周的第一天。 最后,通过这些我们可以判断
本周的起止日期: sqlserver中 WeekStart = CONVERT(VARCHAR(100),(getdate()-DATEPART(dw,getdate()) +1),23) WeekEnd = CONVERT(VARCHAR(100),(getdate()-DATEPART(dw,getdate()) +7),23) C#中 就不用说了 WeekStart = DateTime.Now.AddDays(-(int)DateTime.Now.DayOfWeek).ToString("yyyy-MM-dd") WeekEnd = DateTime.Now.AddDays(6-(int)DateTime.Now.DayOfWeek).ToString("yyyy-MM-dd")
http://developer.51cto.com/art/200511/11126_2.htm |
请发表评论