C#DateTime扩展方法

时间:2014-08-02 10:53:18

标签: c# datetime

我被要求通过扩展方法扩展DateTime类型。 然后我需要创建一个方法来检查添加的月份值是否是我的出生日,如果不是,它将告诉我在我出生日之前剩下多少个月。 我试图为DateTime扩展创建以下类,其中包含扩展方法。

我刚刚迷失了该方法中的出生日月计算

应该是这样的:

public static class MyDateTimeExtension
{
    public static DateTime Month(this DateTime DiffDT)
    {
        DateTime BirthdayMonth;
        DateTime CurrentMonth;
        return DiffDT = BirthdayMonth - CurrentMonth;
    }
}

或类似

        return DiffDT.AddMonths = BirthdayMonth.AddMonths - CurrentMonth.AddMonths;

但是当然这段代码无法编译。 创建扩展方法后,我应该使用新的DateTime变量

从主类调用该方法
 DateTime DT;
 Console.WriteLine(DT.Month());

希望这有助于理解

2 个答案:

答案 0 :(得分:3)

为了实现这个逻辑,我使用扩展方法检查月份是否在一年中的晚些时候,如果是,则为环绕逻辑添加12。这是扩展方法:

public static int DateTimeMonth(this DateTime dt, DateTime birthday)
{
    int difference = birthday.Month - dt.Month;
    if (difference < 0)
    {
        difference += 12;
    }
    return difference;
}

以下是使用此方法的主要代码:

DateTime today = DateTime.Now;
DateTime birthday = new DateTime(1985, 03, 22);
int monthDifference = today.DateTimeMonth(birthday);
if (monthDifference == 0)
{
   Console.WriteLine("It is your birthday month this month!");
}
else
{
   Console.WriteLine("It will be your birthday in " + monthDifference + " months.");
}

扩展方法返回一个可以在调用者中使用的整数,但是如果你只想要在WriteLines中显示正在打印的内容的字符串,则可以让扩展方法执行此逻辑并返回该字符串。 / p>

答案 1 :(得分:1)

为了实现这个逻辑,我做了如下所示的扩展方法,检查出来,是否对你有所帮助。

class Program
{
    static void Main()
    {
        string date = "1987/7/2";
        DateTime dt = Convert.ToDateTime(date);

        string diffDate =  MyDateTimeExtension.GetDiffDate(dt);       
        string[] words = diffDate.Split('/');

        if (Convert.ToInt32(words[1])== 0 && Convert.ToInt32(words[2])== 0)
        {
            Console.WriteLine("Today is your Birthday");
        }
        else
        {
            Console.WriteLine("You are " + words[0] + " Year/s " +  words[1] + " Month/s " +  words[2] + " Day/s");
        }
    }
}

public static class MyDateTimeExtension
{
    public static string GetDiffDate(this DateTime dtt)
    {
       int intYear, intMonth, intDay;

        DateTime td = DateTime.Now;
        int leapYear = 0;
        for (int i = dtt.Year; i < td.Year; i++)
        {
            if (DateTime.IsLeapYear(i))
            {
                ++leapYear;
            }
        }

        TimeSpan timespan = td.Subtract(dtt);

        intDay = timespan.Days - leapYear;
        int intResult = 0;

        intYear = Math.DivRem(intDay, 365, out intResult);
        intMonth = Math.DivRem(intResult, 30, out intResult);
        intDay = intResult;

        string dateFormat= String.Format(intYear.ToString() + "/" + intMonth + "/" + intDay);   
        return dateFormat;
    }
}