namespace practice
{
class Test
{
static void KeyInPara(MyDateTime date)
{
int year;
int month;
int day;
do
{
Console.WriteLine("輸入一個西元年份");
year = Convert.ToInt16(Console.ReadLine());
if (year > 0)
date.Year = year;
else
Console.WriteLine("重新輸入");
} while (date.Year < 0);
do
{
Console.WriteLine("輸入一個西元月份");
month = Convert.ToInt16(Console.ReadLine());
if (month > 0)
date.Month = month;
else
Console.WriteLine("重新輸入");
} while (date.Month < 0);
do
{
Console.WriteLine("輸入一個西元日期");
day = Convert.ToInt16(Console.ReadLine());
if (month > 0)
date.Day = day;
else
Console.WriteLine("\n重新輸入");
} while (date.Day < 0);
}
static void DetermineWeeks(MyDateTime date,int year, int month, int day)
{
Console.WriteLine("{0}/{1}/{2} : ", year,month,day);
switch(date.DetermineWeek(year,month,day))
{
case 0:
Console.WriteLine("星期日");
break;
case 1:
Console.WriteLine("星期一");
break;
case 2:
Console.WriteLine("星期二");
break;
case 3:
Console.WriteLine("星期三");
break;
case 4:
Console.WriteLine("星期四");
break;
case 5:
Console.WriteLine("星期五");
break;
case 6:
Console.WriteLine("星期六");
break;
}
}
static void Main(string[] args)
{
MyDateTime date = new MyDateTime();
string iscontinue="y";
do
{
KeyInPara(date);
Console.WriteLine("====================我是分隔線====================");
Console.WriteLine("{0}/{1}/{2}", date.Year, date.Month, date.Day);
if (date.DetermineLeapYear(date.Year) == true)
{
Console.WriteLine("{0}是閏年", date.Year);
Console.WriteLine("{0}年有366天", date.Year);
}
else
{
Console.WriteLine("{0}是平年", date.Year);
Console.WriteLine("{0}年有365天", date.Year);
}
Console.WriteLine("{0}/{1}月 有{2}天", date.Year, date.Month, date.CountDayofMonth(date.Year, date.Month));
DetermineWeeks(date, date.Year, date.Month, date.Day);
Console.WriteLine("====================我是分隔線====================");
Console.WriteLine("\n是否繼續(y)");
iscontinue = Console.ReadLine();
} while (iscontinue == "y");
Console.WriteLine("按任意鍵結束");
Console.ReadKey();
}
}
}
namespace practice
{
class MyDateTime
{
public int Year;
public int Month;
public int Day;
public bool DetermineLeapYear(int year)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) //可被4整除 && 不可被100整除 ||可被400整除
return true;
return false;
}
public int CountDayofMonth(int year, int month)
{
if ((1 <= month) && (month <= 12) && month != 2)
{
if (month <= 7)
{
if ((month % 2) == 1)
return 31;
else
return 30;
}
else
{
if ((month % 2) == 1)
return 30;
else
return 31;
}
}
else
if (DetermineLeapYear(year) == true)
return 29;
else
return 28;
}
public int DetermineWeek(int year, int month, int day)
{
double frontofyears, behindofyear;
double week;
frontofyears = year / 100;
behindofyear = year % 100;
if (month == 1 || month == 2)
{
if (month == 1)
{
month = 13;
year--;
}
else
{
month = 14;
year--;
}
}
week = behindofyear + Math.Floor(behindofyear / 4) + Math.Floor(frontofyears / 4) - 2 * frontofyears +
Math.Floor((26 * ((double)month + 1)) / 10) + day - 1;
if (week < 0)
week = (week % 7 + 7) % 7;
else
week %= 7;
if (month == 13)
{
month = 1;
year++;
}
else
{
month = 2;
year++;
}
return (int)week;
}
public bool DetermineDayIslegal(int year,int month,int day)
{
if (year < 0)
return false;
else
if (month < 1 || month > 12)
return false;
else
if (day > CountDayofMonth(year, month))
return false;
else
return true;
}
public int CountDayBetweenOther(int year, int month, int day, int year2, int month2, int day2)
{
int sumOfDay = 0;
for (int i = year2; year < i; i--)
{
if (DetermineLeapYear(year++) == true)
sumOfDay += 366;
else
sumOfDay += 365;
}
for (int i = month2 - 1; i >= 1; i--)
sumOfDay += CountDayofMonth(year2, i);
for (int i = month - 1; i >= 1; i--)
sumOfDay -= CountDayofMonth(year2, i);
return sumOfDay + day2 - day - 1;
}
}
}
沒有留言:
張貼留言