C# 日期计算

来源:互联网 发布:mac miller身高 编辑:程序博客网 时间:2024/05/01 09:43

日期计算,用 C# 控制台 写的程序。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections;namespace 计算日期{    class Program    {        /// <summary>        /// 主程序入口        /// </summary>        /// <param name="args"></param>        static void Main(string[] args)        {            while (true)            {                Console.WriteLine("***********************日期计算工具***********************");                Console.WriteLine("输入开始日期和结束日期,日期格式为六位YYYYMMDD,如 20121231");                Console.Write("开始日期:  ");                string str1 = Console.ReadLine();                Console.Write("结束日期:  ");                string str2 = Console.ReadLine();                Console.WriteLine("日期相差:  " + CalculateDate(str1, str2) + " 天");                Console.WriteLine("是否继续,继续直接点回车,退出输入0");                string str3 = Console.ReadLine();                if (str3 == "0") break;            }        }        /// <summary>        /// 计算某年某月某日(不含该天)到某年某月某日共计多少天(如20131101到20131105为4天)        /// </summary>        /// <param name="Date1"></param>        /// <param name="Date2"></param>        /// <returns></returns>        public static int CalculateDate(string Date1, string Date2)        {            ArrayList myAL = new ArrayList();            int year1 = int.Parse(Date1.Substring(0, 4));            int year2 = int.Parse(Date2.Substring(0, 4));            int month1 = int.Parse(Date1.Substring(4, 2));            int month2 = int.Parse(Date2.Substring(4, 2));            int day1 = int.Parse(Date1.Substring(6, 2));            int day2 = int.Parse(Date2.Substring(6, 2));            int yearnum = year2 - year1 - 1;            int LeapYearnum = HowManyLeapYear(year1, year2);            int num = yearnum * 365 + LeapYearnum;            num += 365 - Datenum(month1, day1);            if (Isleapyear(year1) && month1 < 2) num++;            num += Datenum(month2, day2);            if (Isleapyear(year2) && month2 > 1) num++;            return num;        }        /// <summary>        /// 判断某年(不含)到某年(不含)之间有多少个闰年        /// </summary>        /// <param name="yearStart"></param>        /// <param name="yearEnd"></param>        /// <returns></returns>        public static int HowManyLeapYear(int yearStart, int yearEnd)        {            //ArrayList myAL = new ArrayList();            //for (int i = yearStart + 1; i < yearEnd; i++)            //{            //    myAL.Add(i);            //}            int count = 0;            for (int i = yearStart + 1; i < yearEnd; i++)            {                if (Isleapyear(i))                {                    count++;                }            }            return count;        }        /// <summary>        /// 判断某年份是否是闰年,返回bool值,闰年为True        /// </summary>        /// <param name="year"></param>        /// <returns></returns>        public static bool Isleapyear(int year)        {            return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;        }        /// <summary>        /// 计算某月某日是该年的第几天(默认为非闰年,1月1日为第一天)        /// </summary>        /// <param name="month"></param>        /// <param name="day"></param>        /// <returns></returns>        public static int Datenum(int month, int day)        {            int num = 0;            for (int i = 1; i < month; i++)            {                num += daysinmonth(i);            }            num += day;            return num;        }        /// <summary>        /// 计算某月多少天(返回该月份天数,2月默认为28天)        /// </summary>        /// <param name="month"></param>        /// <returns></returns>        public static int daysinmonth(int month)        {            switch (month)            {                case 1:                case 3:                case 5:                case 7:                case 8:                case 10:                case 12:                    return 31;                case 4:                case 6:                case 9:                case 11:                    return 30;                case 2:                    return 28;                default:                    return -1;            }        }    }}


运行结果