C#中的日期数据类型的使用
痕迹 程序员大联盟 2003-4-9
详细代码请参看:
using System;
class DOB
{
private DateTime dtDob;
private DateTime dtNow;
private DateTime dtAge;
private int intDay;
private int intMonth;
private int intYear;
private int intHour;
private int intMinute;
private TimeSpan tsAge;
private int intAgeYear;
private int intAgeMonths;
private int intAgeDays;
private int intAgeHours;
private int intAgeMinutes;
public static void Main(String[] args)
{
DOB objDob = new DOB();
objDob.getDob();
objDob.createDateObjects();
Console.WriteLine("Your Age in Years :" + objDob.getAgeInYears());
Console.WriteLine("Your Age in Months :" + objDob.getAgeInMonths());
Console.WriteLine("Your Age in Days :" + objDob.getAgeInDays());
Console.WriteLine("Your Age in Hours : " + objDob.getAgeInHours());
Console.WriteLine("Your Age in Minutes : " + objDob.getAgeInMinutes());
Console.WriteLine("Your Accurate Age is : " + objDob.getAgeInYears() + " Years " +
objDob.getMonthDiff() + " months " + objDob.getDayDiff() + " days");
}
/* get the date */
private void getDob()
{
try
{
Console.Write("Enter the Day u were born : ");
intDay = Console.ReadLine().ToInt32();
Console.Write("Month : ");
intMonth = Console.ReadLine().ToInt32(); ;
Console.Write("Year(yyyy) : ");
intYear = Console.ReadLine().ToInt32();
Console.Write("Hour(0-23) : ");
intHour = Console.ReadLine().ToInt32();
Console.Write("Minute(0-59) : ");
intMinute = Console.ReadLine().ToInt32();
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
Environment.Exit(0);
}
}
/* create the date objects */
private void createDateObjects()
{
dtDob = new DateTime(intYear, intMonth, intDay, intHour, intMinute, 0);
dtNow = DateTime.Now;
if (DateTime.Compare(dtNow, dtDob) == 1)
tsAge = dtNow.Subtract(dtDob);
else
{
Console.WriteLine("Future dates cannot be entered.");
Environment.Exit(0);
}
dtAge = new DateTime(tsAge.Ticks);
Console.WriteLine("Your date of birth :" + dtDob.Format("F", null));
}
/* calculates the age in Years */
private int getAgeInYears()
{
intAgeYear = dtAge.Year - 1;
return intAgeYear;
}
/* calculates the age in months */
private int getAgeInMonths()
{
intAgeMonths = intAgeYear * 12;
intAgeMonths = intAgeMonths + (dtAge.Month - 1);
return intAgeMonths;
}
/* calculates the age in days */
private int getAgeInDays()
{
if (dtDob.Year == dtNow.Year)
{
intAgeDays = dtNow.DayOfYear - dtDob.DayOfYear;
}
else
{
if (DateTime.IsLeapYear(dtDob.Year))
intAgeDays = 366 - dtDob.DayOfYear;
else
intAgeDays = 365 - dtDob.DayOfYear;
for (int i = dtDob.Year + 1; i < dtNow.Year; i++)
{
if (DateTime.IsLeapYear(i))
intAgeDays += 366;
else
intAgeDays += 365;
}
intAgeDays += dtNow.DayOfYear;
}
return intAgeDays;
}
/* calculates the age in Hours */
private int getAgeInHours()
{
intAgeHours = getAgeInDays() * 24;
intAgeHours = intAgeHours + (dtNow.Hour - dtDob.Hour);
return intAgeHours;
}
/* calculates the age in Minutes */
private int getAgeInMinutes()
{
intAgeMinutes = getAgeInHours() * 60;
intAgeMinutes = intAgeMinutes + (dtNow.Minute - dtDob.Minute);
return intAgeMinutes;
}
/* calculates the month part of the accurate Age */
private int getMonthDiff()
{
return getAgeInMonths() % 12;
}
/* calculates the day part of the accurate Age */
private int getDayDiff()
{
int intDayTemp1 = getAgeInDays();
int intDayTemp2;
int intTempYear;
int intTempMonth;
int intTempDay = intDay;
if (dtNow.Year != dtDob.Year)
{
if (1 == dtNow.Month)
{
intTempYear = dtNow.Year - 1;
intTempMonth = 12;
}
else
{
if (dtNow.Day < intTempDay)
intTempMonth = dtNow.Month - 1;
else
{
intTempMonth = dtNow.Month;
intTempDay = 1;
}
intTempYear = dtNow.Year;
}
}
else
{
if (1 == dtNow.Month || dtDob.Month == dtNow.Month)
return getAgeInDays();
else
{
if (dtNow.Day < intTempDay)
intTempMonth = dtNow.Month - 1;
else
{
intTempMonth = dtNow.Month;
intTempDay = 1;
}
}
intTempYear = intYear;
}
dtNow = new DateTime(intTempYear, intTempMonth, intDay);
intDayTemp2 = getAgeInDays();
return intDayTemp1 - intDayTemp2;
}
}
/*
Result
--
D:\progs>dob
Enter the Day u were born : 1
Month : 1
Year(yyyy) : 2000
Hour(0-23) : 1
Minute(0-59) : 4
Your date of birth :Saturday, January 01, 2000 1:04:00 AM
Your Age in Years :1
Your Age in Months :17
Your Age in Days :520
Your Age in Hours : 12489
Your Age in Minutes : 749375
Your Accurate Age is : 1 Years 5 months 3 days
*/