C#中与SQL中求本周是本年的第几周
最近的一个 周报表 既需要C#求本周是今年的第几周 又需要在存储过程里 通过sql求。
在 sql里 有函数可以直接求出。但是在C#里 没有直接的属性或函数,必须自己来算。
C#里可以知道今天是本周的第几天,还可以知道今天是本年的第几天。这样我们就可以求出本周是今年的第几周。 有两种思路:
1、 可以先算出 上周末是哪天,然后算出上周是第几周,(算法是: 用7整除上周末在今年的天数 如果能被整除则 结果就是上周在今年的第几周,否则 结果+1 ) 最后再 + 1, 就是本周的顺序。
例如:
{
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")