几天都没有做出来..如何获得每个星期的星期1?

解决方案 »

  1.   

    /// <summary>
    /// 计算本周起始日期(礼拜一的日期)
    /// </summary>
    /// <param name="someDate">该周中任意一天</param>
    /// <returns>返回礼拜一日期,后面的具体时、分、秒和传入值相等</returns>
    public static DateTime CalculateFirstDateOfWeek(DateTime someDate)
    {
        int i = someDate.DayOfWeek - DayOfWeek.Monday;
        if (i == -1) i = 6;// i值 > = 0 ,因为枚举原因,Sunday排在最前,此时Sunday-Monday=-1,必须+7=6。
        TimeSpan ts = new TimeSpan(i, 0, 0, 0);
        return someDate.Subtract(ts);
    }/// <summary>
    /// 计算本周结束日期(礼拜日的日期)
    /// </summary>
    /// <param name="someDate">该周中任意一天</param>
    /// <returns>返回礼拜日日期,后面的具体时、分、秒和传入值相等</returns>
    public static DateTime CalculateLastDateOfWeek(DateTime someDate)
    {
        int i = someDate.DayOfWeek - DayOfWeek.Sunday;
        if(i != 0) i = 7 - i;// 因为枚举原因,Sunday排在最前,相减间隔要被7减。
        TimeSpan ts = new TimeSpan(i, 0, 0, 0);
        return someDate.Add(ts);
    }/// <summary>
    /// 判断选择的日期是否是本周(根据系统当前时间决定的‘本周’比较而言)
    /// </summary>
    /// <param name="someDate"></param>
    /// <returns></returns>
    public static bool IsThisWeek(DateTime someDate)
    {
        //得到someDate对应的周一
        DateTime someMon = CalculateFirstDateOfWeek(someDate);
        //得到本周一
        DateTime nowMon = CalculateFirstDateOfWeek(DateTime.Now);    TimeSpan ts = someMon - nowMon;
        if (ts.Days < 0)
            ts = -ts;//取正
        if (ts.Days >= 7)
        {
            return false;
        }
        else 
        {
            return true;
        }
    }
      

  2.   

    楼上的,你的算法基于的假设是“星期一是每周的第一天”,但好像根据我们的日历或者 DayOfWeek 枚举的排序,每周的第一天应该是星期日才对。如果真的要设计跨文化程序,那么就要用到 Application.Calendar.FirstDayOfWeek 来判断了。当然,这不是什么原则问题。呵呵……另外,判断是否为本周的话,
    直接用 someDate.DayOfYear - firstDayOfWeek.DayOfYear,然后判断所得的 TimeSpan.Days 是否大于 7 就行了。(这里 someDate 是要判断的日期, firstDayOfWeek 是每周的第一天)。
    最后,枚举相减可能会导致类型转换问题吧?
      

  3.   

    Dim d1 As Date = "2006-10-1"
           If d1.DayOfWeek = 0 Then MsgBox("本天是一个星期的第一天!")
      

  4.   

    在ASP里周日是第一天
    NET里也一样
    LZ与二楼的要注意一下哟