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
*/
Contributors: FHL