C#中与SQL中求本周是本年的第几周

C#中与SQL中求本周是本年的第几周

 

    最近的一个 周报表 既需要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

 

posted @ 2010-06-02 17:45  唔愛吃蘋果  阅读(752)  评论(0编辑  收藏  举报