取得日期对应的星期数

我这个方法有点小取巧,只取1900-01-01年后的数据,之前的的日期需要重新计算一下。

1、先取出输入的日期距离1900-01-01的天数

        private static int GetDays(int year, int month, int day)
        {
            //1900-1-1是星期一
            int result = 0;
            int[] month31 = {1,3,5,7,8,10,12};
            int[] month30 = {4,6,9,11};
            const int YEAR = 1900;
            const int MONTH = 1;
            const int DAY = 1;

            //先按整年计算*****************************************
            result += (year - YEAR) * 365;
            for (int i = YEAR; i < year; i++)
            {
                if (IsLeapYear(i))
                {
                    ++result;
                }
            }
            
            //计算月份********************************************
            if (month > MONTH)
            {
                for (int i = MONTH; i < month; i++)
                {
                    if (i == 2 && IsLeapYear(year))
                    {
                        result += 29;
                    }
                    else
                    {
                        result += 28;
                    }

                    if (month30.Contains(i))
                    {
                        result += 30;
                    }

                    if (month31.Contains(i))
                    {
                        result += 31;
                    }
                }
            }
            else
            {
                //月份相等的情况,不可能有月份小于1,不需要做任何运算,在下面的日计算直接计算即可                
            }

            //计算日*********************************
            result += day - DAY;


            return result;
        }

2、将天数差对7取余,比如相差1900-01-07和1900-01-01相差7天,那么取余得到0,说明是星期天,

如果是1900-01-08,则取余为1,说明和1900-01-01是同一个星期,即星期一

        /// <summary>
        /// 根据天数差获取是星期几
        /// </summary>
        /// <param name="days">天数差</param>
        /// <param name="weekInt">取余后的数</param>
        /// <returns></returns>
        private static string GetWeekDay(int days,out int weekInt)
        {
            Dictionary<int, string> weekDic = new Dictionary<int, string>();
            weekDic.Add(1, "星期一");
            weekDic.Add(2, "星期二");
            weekDic.Add(3, "星期三");
            weekDic.Add(4, "星期四");
            weekDic.Add(5, "星期五");
            weekDic.Add(6, "星期六");
            weekDic.Add(7, "星期天");
            weekInt = days % 7 == 0 ? 7 : days % 7;
            return weekDic[weekInt];            
        }

3、输出结果

                Console.WriteLine("请输入一个日期:");
                string dateStr = Console.ReadLine();
                string[] dateArray = dateStr.Split('-');
                int year = int.Parse(dateArray[0]);
                int month = int.Parse(dateArray[1]);
                int day = int.Parse(dateArray[2]);
                int days = GetDays(year, month, day);
                int weekInt = 0;
                Console.WriteLine("距离1900-1-1,有" + days + "天的时间");
                Console.WriteLine("这一天是" + GetWeekDay(days, out weekInt));

可以用在js计算星期上。

原文地址:https://www.cnblogs.com/chengzi/p/4221912.html