输入年和周得到对应的,年月日,星期几,当前周,总周数,当前周标记

   /// <summary>
        /// 根据传过来的周找对应的年月日和星期几
        /// </summary>
        /// <param name="week"></param>
        /// <returns></returns>
        public static List<DateAndXQ> GetDateByWeek(int week, int year=0, int status = 0) //周,月,状态
        {
            //当前时间
            var NowTime = DateTime.Now;
            //当前周
            GregorianCalendar gc = new GregorianCalendar();
            int weekOfYear = gc.GetWeekOfYear(NowTime, CalendarWeekRule.FirstDay, DayOfWeek.Monday);

            List<DateAndXQ> datetime = new List<DateAndXQ>();
            //获取当前的年份
            var someTime = Convert.ToDateTime(status == 0 ? NowTime.ToString("yyyy-1-1") : NowTime.AddYears(1).ToString("yyyy-1-1"));
            if (year!=0)
            {
                someTime = Convert.ToDateTime(year+"- 1 - 1");
            }
            //判断本年有多少周
            int countDay = DateTime.Parse(someTime.Year + "-12-31").DayOfYear;
            int countWeek = countDay / 7;
            if (week > 0 && week <= countWeek)//做数据控制防止输错,造成数据混乱
            {
                int i = someTime.DayOfWeek - DayOfWeek.Monday;
                if (i == -1) i = 6;// i值 > = 0 ,因为枚举原因,Sunday排在最前,此时Sunday-Monday=-1,必须+7=6。
                TimeSpan ts = new TimeSpan(i, 0, 0, 0);
                //获取第N周的星期一
                someTime = someTime.Subtract(ts).AddDays((week - 1) * 7);
                ////获得星期几
                //someTime = someTime.AddDays(day - 1);
                var cnt = status == 1 ? 1 : 7;//如果是1则只查每周的开始结束时间
                for (int x = 1; x <= cnt; x++)
                {
                    DateAndXQ time = new DateAndXQ();
                    //获得星期几
                    time.Date = someTime.AddDays(x - 1).ToString("yyyy-MM-dd");
                    time.MinDate = someTime.AddDays(0).ToString("yyyy-MM-dd");
                    time.MaxDate = someTime.AddDays(6).ToString("yyyy-MM-dd");
                    //根据循环出的日期找出对应的月和天对应的星期
                    //转化为日期格式
                    var dates = Convert.ToDateTime(time.Date);
                    var years = dates.Year;
                    var month = dates.Month;
                    var day = dates.Day;
                    time.Week = CaculateWeekDay(years, month, day);
                    time.WeekCnt = countWeek;
                    time.WeekNow = week;
                    //当前周标记
                    time.WeekNowFlag = weekOfYear == week ? "T" : "F";
                    datetime.Add(time);
                }
            }
            return datetime;
        }


        /// <summary>
        /// 根据年月日获得星期几
        /// </summary>
        /// <param name="year"></param>
        /// <param name="month"></param>
        /// <param name="day"></param>
        /// <returns></returns>
        private static string CaculateWeekDay(int year, int month, int day)
        {
            string weekstr = string.Empty;
            //把一月和二月看成是上一年的十三月和十四月
            if (month == 1) { month = 13; year--; }
            if (month == 2) { month = 14; year--; }
            int week = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
            switch (week)
            {
                case 0: weekstr = "星期一"; break;
                case 1: weekstr = "星期二"; break;
                case 2: weekstr = "星期三"; break;
                case 3: weekstr = "星期四"; break;
                case 4: weekstr = "星期五"; break;
                case 5: weekstr = "星期六"; break;
                case 6: weekstr = "星期日"; break;
            }
            return weekstr;
        }

posted @ 2018-03-16 14:06  代码驿站  阅读(875)  评论(0编辑  收藏  举报