Geçen Süreyi Hesapla - CSharp


Geçen süreyi hesaplamaya yarayan csharp kodudur.

Kod


public static string GecenSureyiHesapla(DateTime dateTime)
{
    DateTime Now = DateTime.Now;
    int Years = new DateTime(DateTime.Now.Subtract(dateTime).Ticks).Year - 1;

    DateTime PastYearDate = dateTime.AddYears(Years);
    int Months = 0;
    for (int i = 1; i <= 12; i++)
    {
        if (PastYearDate.AddMonths(i) == Now)
        {
            Months = i;
            break;
        }
        else if (PastYearDate.AddMonths(i) >= Now)
        {
            Months = i - 1;
            break;
        }
    }
    int Days = Now.Subtract(PastYearDate.AddMonths(Months)).Days;
    int Hours = Now.Subtract(PastYearDate).Hours;
    int Minutes = Now.Subtract(PastYearDate).Minutes;
    int Seconds = Now.Subtract(PastYearDate).Seconds;

    string sonuc = "";

    sonuc = String.Format("{0} Yıl {1} Ay {2} Gün {3} Saat {4} Dakika {5} Saniye",
        Years, Months, Days, Hours, Minutes, Seconds);


    //Dikkat!
    //if şartlarını her seferinde && ile birleştirerek yaptık.
    //Bunun sebebi de şu: Normalde çalışıyor fakat eğer değerlerden
    //birisi bir şekilde sıfıra eşitse eksik sonuç veriyor.
    //Bu da yanlış anlaşılmalara sebebiyet verebiliyor.
    //Hem her zaman ortaya çıkan bir bug değil, 
    //hem de kafa karıştıran sonuçlar üretiyor.
    //Enteresan bir bug çeşidi.
    if (Years == 0)
    {
        sonuc = String.Format("{0} Ay {1} Gün {2} Saat {3} Dakika {4} Saniye",
            Months, Days, Hours, Minutes, Seconds);
    }

    if (Years == 0 && Months == 0)
    {
        sonuc = String.Format("{0} Gün {1} Saat {2} Dakika {3} Saniye",
            Days, Hours, Minutes, Seconds);
    }

    if (Years == 0 && Months == 0 && Days == 0)
    {
        sonuc = String.Format("{0} Saat {1} Dakika {2} Saniye",
            Hours, Minutes, Seconds);
    }

    if (Years == 0 && Months == 0 && Days == 0 && Hours == 0)
    {
        sonuc = String.Format("{0} Dakika {1} Saniye",
            Minutes, Seconds);
    }

    if (Years == 0 && Months == 0 && Days == 0 && Hours == 0 && Minutes == 0)
    {
        sonuc = String.Format("{0} Saniye",
            Seconds);
    }

    return sonuc;

    //Kaynak
    //https://www.c-sharpcorner.com/code/961/how-to-calculate-age-from-date-of-birth-in-c-sharp.aspx
}

Etiketler
csharp