首页 > 代码库 > 获取月份的周时间段

获取月份的周时间段

包括C#方法和SQL方法。

C#

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            Console.WriteLine("输入日期,并回车(0退出):");            string d1 = Console.ReadLine();            while (d1 != "0")            {                DateTime dt = Convert.ToDateTime(d1);                List<MyDate> datelist = DateUtil.GetWeekOfMonth(dt);                Console.WriteLine(dt.Year+""+dt.Month+"月包含【"+datelist.Count+"】周:");                foreach (var d in datelist)                {                    Console.WriteLine(d.firstDate + "\t" + d.lastDate);                }                d1 = Console.ReadLine();            }        }    }    class DateUtil{        #region 获取时间(周,月)        public static DateTime GetWeekDateStart(DateTime? date)        {            DateTime currentdate = date.HasValue ? date.Value : DateTime.Now;            //本周            int weeknow = Convert.ToInt32(currentdate.DayOfWeek);            //星期日 获取weeknow为0            weeknow = weeknow == 0 ? 7 : weeknow;            int daydiff = (-1) * weeknow + 1;            //本周第一天            return currentdate.AddDays(daydiff);        }        public static DateTime GetWeekDateEnd(DateTime? date)        {            DateTime currentdate = date.HasValue ? date.Value : DateTime.Now;            //本周            int weeknow = Convert.ToInt32(currentdate.DayOfWeek);            //星期日 获取weeknow为0            weeknow = weeknow == 0 ? 7 : weeknow;            int dayadd = 7 - weeknow;            //本周最后一天            return currentdate.AddDays(dayadd);        }        public static DateTime GetMonthDateStart(DateTime? date)        {            DateTime currentdate = date.HasValue ? date.Value : DateTime.Now;            //本月第一天时间             DateTime firstDate = currentdate.AddDays(-(currentdate.Day) + 1);            return firstDate;        }        public static DateTime GetMonthDateEnd(DateTime? date)        {            DateTime currentdate = date.HasValue ? date.Value : DateTime.Now;            DateTime dt = currentdate;            //将本月月数+1             DateTime dt2 = dt.AddMonths(1);            //本月最后一天时间             DateTime lastDate = dt2.AddDays(-(dt.Day));            return lastDate;        }        /// <summary>        /// 获取月份内的周时间段        /// </summary>        /// <param name="crdate">时间</param>        /// <returns>当月周时间段</returns>        public static List<MyDate> GetWeekOfMonth(DateTime? crdate)        {            List<MyDate> dateList = new List<MyDate>();            DateTime currentdate = crdate.HasValue ? crdate.Value : DateTime.Now;            DateTime firstDayofMonth = GetMonthDateStart(currentdate);            DateTime lastDayofMonth = GetMonthDateEnd(currentdate);            DateTime Week1firstday = GetWeekDateStart(firstDayofMonth);            Week1firstday = Week1firstday < firstDayofMonth ? firstDayofMonth : Week1firstday;                        //第一周            MyDate date1 = new MyDate();            date1.firstDate = Week1firstday;            date1.lastDate = GetWeekDateEnd(firstDayofMonth);            dateList.Add(date1);            //第二周            MyDate date2 = new MyDate();            DateTime Week2firstday = Week1firstday.AddDays(7);            date2.firstDate = GetWeekDateStart(Week2firstday); ;            date2.lastDate = GetWeekDateEnd(Week2firstday);            dateList.Add(date2);            //第三周            MyDate date3 = new MyDate();            DateTime Week3firstday = Week2firstday.AddDays(7);            date3.firstDate = GetWeekDateStart(Week3firstday); ;            date3.lastDate = GetWeekDateEnd(Week3firstday);            dateList.Add(date3);            //第四周            MyDate date4 = new MyDate();            DateTime Week4firstday = Week3firstday.AddDays(7);            if (Week4firstday > lastDayofMonth)            { Week4firstday = lastDayofMonth; }            date4.firstDate = GetWeekDateStart(Week4firstday);            date4.lastDate = GetWeekDateEnd(Week4firstday);            if (date4.firstDate > lastDayofMonth)            {                return dateList;            }            if (date4.lastDate >= lastDayofMonth)            {                date4.lastDate = lastDayofMonth;                dateList.Add(date4);                return dateList;            }            dateList.Add(date4);            //第五周            MyDate date5 = new MyDate();            DateTime Week5firstday = Week4firstday.AddDays(7);            if (Week5firstday > lastDayofMonth)            { Week5firstday = lastDayofMonth; }            date5.firstDate = GetWeekDateStart(Week5firstday);            date5.lastDate = GetWeekDateEnd(Week5firstday);            if (date5.firstDate > lastDayofMonth)            {                return dateList;            }            if (date5.lastDate >= lastDayofMonth)            {                date5.lastDate = lastDayofMonth;                dateList.Add(date5);                return dateList;            }            dateList.Add(date5);            //第六周            MyDate date6 = new MyDate();            DateTime Week6firstday = Week5firstday.AddDays(7);            if (Week6firstday > lastDayofMonth)            { Week6firstday = lastDayofMonth; }            date6.firstDate = GetWeekDateStart(Week6firstday);            date6.lastDate = GetWeekDateEnd(Week6firstday);            if (date6.firstDate > lastDayofMonth)            {                return dateList;            }            if (date6.lastDate >= lastDayofMonth)            {                date6.lastDate = lastDayofMonth;                dateList.Add(date6);                return dateList;            }            dateList.Add(date6);            return dateList;        }        #endregion    }    class MyDate    {        public DateTime firstDate { get; set; }        public DateTime lastDate { get; set; }    }}

测试示例:

SQL

DECLARE @ym VARCHAR(7)SET @ym = 2013-12SET datefirst 1SELECT  wk ,        MIN(d) d1 ,        MAX(d) d2FROM    ( SELECT    DATEPART(wk, d) wk ,                    d          FROM      ( SELECT    DATEADD(D, number, @ym + -01) d                      FROM      master..spt_values                      WHERE     type = p                                AND CONVERT(VARCHAR(7), DATEADD(D, number,                                                              @ym + -01), 120) = @ym                    ) t        ) tGROUP BY wk

测试示例:

 

另mark周几获取方法

public string Week()        {            string[] weekdays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };            string week = weekdays[Convert.ToInt32(DateTime.Now.DayOfWeek)];            return week;        }