2 つの日付の違いを見つけて、結果を年、月、日、時間の形式で表示する必要があります (例: 1 年 2 月 6 日 4 時間)。
これどうやってするの。曜日と時間は非常に単純です。しかし、年と月は私に苦労しています。
結果が 100% 正確である必要があります... 1 か月あたり 30 日または 1 年あたり 356 日とは想定できません。助けてくださいありがとう。
2 つの日付の違いを見つけて、結果を年、月、日、時間の形式で表示する必要があります (例: 1 年 2 月 6 日 4 時間)。
これどうやってするの。曜日と時間は非常に単純です。しかし、年と月は私に苦労しています。
結果が 100% 正確である必要があります... 1 か月あたり 30 日または 1 年あたり 356 日とは想定できません。助けてくださいありがとう。
var timeSpan = dateTime2 - dateTime1;
var years = timeSpan.Days / 365;
var months = (timeSpan.Days - years * 365)/30;
var days = timeSpan.Days - years * 365 - months * 30;
// and so on
class Program
{
static void Main()
{
DateTime oldDate = new DateTime(2014,1,1);
DateTime newDate = DateTime.Now;
TimeSpan dif = newDate - oldDate;
int leapdays = GetLeapDays(oldDate, newDate);
var years = (dif.Days-leapdays) / 365;
int otherdays = GetAnOtherDays(oldDate, newDate , years);
int months = (int)((dif.Days - (leapdays + otherdays)- (years * 365)) / 30);
int days = (int)(dif.Days - years * 365 - months * 30) - (leapdays + otherdays);
Console.WriteLine("Edad es {0} años, {1} meses, {2} días", years, months, days) ;
Console.ReadLine();
}
public static int GetAnOtherDays(DateTime oldDate, DateTime newDate, int years) {
int days = 0;
oldDate = oldDate.AddYears(years);
DateTime oldDate1 = oldDate.AddMonths(1);
while ((oldDate1.Month <= newDate.Month && oldDate1.Year<=newDate.Year) ||
(oldDate1.Month>newDate.Month && oldDate1.Year<newDate.Year)) {
days += ((TimeSpan)(oldDate1 - oldDate)).Days - 30;
oldDate = oldDate.AddMonths(1);
oldDate1 = oldDate.AddMonths(1);
}
return days;
}
public static int GetLeapDays(DateTime oldDate, DateTime newDate)
{
int days = 0;
while (oldDate.Year < newDate.Year) {
if (DateTime.IsLeapYear(oldDate.Year)) days += 1;
oldDate = oldDate.AddYears(1);
}
return days;
}
}