C#日期时间扩展方法

nir*_*989 0 c# datetime

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

我只是迷失了该方法中的生日月份计算

应该是这样的:

public static class MyDateTimeExtension
{
    public static DateTime Month(this DateTime DiffDT)
    {
        DateTime BirthdayMonth;
        DateTime CurrentMonth;
        return DiffDT = BirthdayMonth - CurrentMonth;
    }
}
Run Code Online (Sandbox Code Playgroud)

或类似的东西

        return DiffDT.AddMonths = BirthdayMonth.AddMonths - CurrentMonth.AddMonths;
Run Code Online (Sandbox Code Playgroud)

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

 DateTime DT;
 Console.WriteLine(DT.Month());
Run Code Online (Sandbox Code Playgroud)

希望这有助于理解

小智 10

为了实现这个逻辑,我让扩展方法检查月份是否在今年晚些时候,如果是,则将 12 添加到环绕逻辑的差异中。下面是扩展方法:

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

这是 main 中使用此方法的代码:

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.");
}
Run Code Online (Sandbox Code Playgroud)

扩展方法返回一个可以在调用者中使用的整数,但如果您只想要表示在 WriteLines 中打印内容的字符串,您可以让扩展方法改为执行此逻辑并返回该字符串。