1

2 つの日付の違いを見つけて、結果を年、月、日、時間の形式で表示する必要があります (例: 1 年 2 月 6 日 4 時間)。

これどうやってするの。曜日と時間は非常に単純です。しかし、年と月は私に苦労しています。

結果が 100% 正確である必要があります... 1 か月あたり 30 日または 1 年あたり 356 日とは想定できません。助けてくださいありがとう。

4

4 に答える 4

1
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
于 2013-11-03T08:22:04.237 に答える
0
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;
    }
}
于 2014-10-17T17:29:36.857 に答える