zoukankan      html  css  js  c++  java
  • 取得日期对应的星期数

    我这个方法有点小取巧,只取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计算星期上。

  • 相关阅读:
    git将已存在的项目转换成git项目&托管git服务器
    联合索引
    MyISAM和InnoDb的关系
    NPOIHelper
    C# CRC各种转换
    appcloud 微信分享大图片
    C# 微信JSSDK 获取配置信息
    简易delegate委托
    GPS、谷歌、百度、高德坐标相互转换
    反射执行方法WINFROM
  • 原文地址:https://www.cnblogs.com/chengzi/p/4221912.html
Copyright © 2011-2022 走看看