版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leonardo_Davinci/article/details/78691903
第一种:给定两个日期计算相隔的天数
例 2017/11/2 2020/3/29
思路:1.得到相隔年的天(包含起始年) 2.减去起始年的的天数(已经过了的) 3.加上当前年的天数(月数和天数)
第二种:给定一个日期,求过了Y 年 M 月 D 天 经过了多少天
例 2017/11/2 3年/14个月/53天/
思路:与第一种相同
第三种:给定一个日期判断是星期几
例 2017/11/2 (这个调用一下时间就行了)
第一种实现:
public class MainClass
{
//起始年的年月日
int nowYear = 2017;
int nowMonth = 11;
int nowDay = 2;
////结束年的年月日
//int lastyear = 2020;
//int lastMonth = 2;
//int lastDay = 14;
//计算总的天数
int sumDay = 0;
public static void Main(string[] args)
{
MainClass main = new MainClass();
int data = main.SumData(2017, 12, 2);
Console.WriteLine(data);
}
//计算两个日期相隔多少天
public int SumData(int year, int month, int day)
{
//计算相隔年的天数
int tempNowYear = nowYear;
while (tempNowYear < year)
{
if (tempNowYear % 4 == 0 && tempNowYear % 100 != 0 || tempNowYear % 400 == 0)
sumDay += 366;
else
sumDay += 365;
tempNowYear++;
}
//减去nowYear已经过了的天数
sumDay -= nowDay;
int tempNowMonth = nowMonth - 1;
while (tempNowMonth > 0)
{
sumDay -= MonthDay(nowYear, tempNowMonth);
tempNowMonth--;
}
//加上现在的lastYear的过了的天数
sumDay += day;
while (month - 1 > 0)
{
sumDay += MonthDay(year, month);
month--;
}
return sumDay;
}
/// <summary>
/// 计算平年和闰年月的天数
/// </summary>
/// <returns>The day.</returns>
/// <param name="year"></param>
/// <param name="month"></param>
public static int MonthDay(int year, int month)
{
int day = 0;
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
case 2:
{
if (year % 4 == 0 && year % 100 != 100 || year % 100 == 0 && year % 400 == 0)
{
day = 29;
}
else
day = 28;
break;
}
}
return day;
}
}
第二种实现:
public class MainClass
{
//起始年的年月日
int nowYear = 2017;
int nowMonth = 11;
int nowDay = 2;
//计算总的天数
int sumDay = 0;
public static void Main(string[] args)
{
MainClass main = new MainClass();
int k = main.Sumfuture(1, 0, 27);
Console.WriteLine(k);
}
/// <summary>
/// 计算平年和闰年月的天数
/// </summary>
/// <returns>The day.</returns>
/// <param name="year"></param>
/// <param name="month"></param>
public static int MonthDay(int year, int month)
{
int day = 0;
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
case 2:
{
if (year % 4 == 0 && year % 100 != 100 || year % 100 == 0 && year % 400 == 0)
{
day = 29;
}
else
day = 28;
break;
}
}
return day;
}
/// <summary>
/// 计算相隔多少天数
/// </summary>
/// <returns>The sumfuture.</returns>
/// <param name="year">Year.</param>
/// <param name="month">Month.</param>
/// <param name="day">Day.</param>
public int Sumfuture(int year, int month, int day)
{
//1.求现在的日期,由于月份没有0,因此为了避免出现0,开始计算月数的时候减去一个一,在后面再加上
/*例 2017/11/2 过了 1 Month
* 2017/12/2
*例 2017//11/2 过了 2 month
* 2018/1/2
*/
int tempMonth = (month + nowMonth - 1);
int tempYear = tempMonth / 12;
tempMonth = tempMonth % 12 + 1;
tempYear = tempYear + nowYear + year;
sumDay += nowDay;
//隔了多少年的天数
int tempNowyear = nowYear;
while (tempNowyear < tempYear)
{
if (tempNowyear % 4 == 0 && tempNowyear % 100 != 0 || tempNowyear % 400 == 0)
sumDay += 366;
else
sumDay += 365;
tempNowyear++;
}
//如果起始年与结束年在同一年
if (nowYear < tempYear)
{
//减去起始年的月数和天数
sumDay -= nowDay;
nowMonth -= 1;
while (nowMonth > 0)
{
sumDay -= MonthDay(nowYear, nowMonth);
nowMonth--;
}
//加上之后剩余的月与天数
sumDay += day;
tempMonth -= 1;
while (tempMonth > 0)
{
sumDay += MonthDay(tempYear, tempMonth);
tempMonth--;
}
return sumDay;
}
else
{
while (nowMonth < tempMonth)
{
sumDay += MonthDay(nowYear, nowMonth);
nowMonth++;
}
sumDay -= nowDay;
sumDay += day;
return sumDay;
}
}
}
第三种实现: