c#日期时间扩展方法

本文关键字:方法 扩展 时间 日期 | 更新日期: 2023-09-27 18:16:17

我被要求通过扩展方法扩展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());

希望这有助于理解

c#日期时间扩展方法

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

public static int DateTimeMonth(this DateTime dt, DateTime birthday)
{
    int difference = birthday.Month - dt.Month;
    if (difference < 0)
    {
        difference += 12;
    }
    return difference;
}
下面是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.");
}

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

为了实现这个逻辑,我做了如下所示的扩展方法,看看它,如果它可能对你有帮助。

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;
    }
}