我被要求通过扩展方法扩展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());
希望这有助于理解
答案 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;
}
}