C# İki Tarih Arası Gün Ay Yıl Hesaplama
-
Merhaba arkadaşlar.
Elimde iki tarih var.
iki tarih arasında ne kadar süre geçtiğini hesaplayarak metne dökmen istiyorum.
Misal
28.12.2018 - 22.02.2020 arasında =>Bu Tarihler Arasındaki Süre: 1 yıl 1 ay 25 gün gibi...
DateTime SonMontaj1 = s.x.MontajTarihi.Value; TimeSpan Fark1 = DateTime.Now - SonMontaj1; int TotalGün = Convert.ToInt32(Fark1.Days.ToString()); int yil = TotalGün / 365; int yilkalan = TotalGün - (yil * 365); int ay = yilkalan / 30; int aykalan = TotalGün - (ay * 30); int gun = aykalan; lblIlk3Fitre.Text = "En son " + (yil == 0 ? "" : yil.ToString().Replace("-", "") + " yıl ") + (ay == 0 ? "" : ay.ToString().Replace("-", "") + " ay ") + (gun == 0 ? "0 gün " : gun.ToString().Replace("-", "") + " gün ") + "önce değiştirilmiştir.";
gibi birşeyle hesaplama yapmaya çalıştım ama bir yıl üzeri tarihlere yanılıyor.
beynim yandı miğdem bulandı bıraktım.
Asayisci tarafından 22/Şub/20 00:45 tarihinde düzenlenmiştir -
-
iki tarihi de timestamp'a çevireceksin,
büyük olandan küçük olanı çıkartıp tekrar dd.mm.yyyy formatına çevireceksin.
-
Adam burda yazmış istediğin şekilde:
https://forums.asp.net/p/1107932/1700897.aspx#1700897
DateTime date1 = new DateTime(2018, 12, 28); DateTime date2 = DateTime.Today; int oldMonth = date2.Month; while (oldMonth == date2.Month) { date1 = date1.AddDays(-1); date2 = date2.AddDays(-1); } int years = 0, months = 0, days = 0, hours = 0, minutes = 0, seconds = 0, milliseconds = 0; // getting number of years while (date2.CompareTo(date1) >= 0) { years++; date2 = date2.AddYears(-1); } date2 = date2.AddYears(1); years--; // getting number of months and days oldMonth = date2.Month; while (date2.CompareTo(date1) >= 0) { days++; date2 = date2.AddDays(-1); if ((date2.CompareTo(date1) >= 0) && (oldMonth != date2.Month)) { months++; days = 0; oldMonth = date2.Month; } } date2 = date2.AddDays(1); days--; TimeSpan difference = date2.Subtract(date1); Console.WriteLine( "Difference: " + years.ToString() + " years" + ", " + months.ToString() + " months" + ", " + days.ToString() + " days" + ", " + difference.Hours.ToString() + " hours" + ", " + difference.Minutes.ToString() + " minutes" + ", " + difference.Seconds.ToString() + " seconds" + ", " + difference.Milliseconds.ToString() + " milliseconds");
-
Favlayım lazım olacak.
end bunu yazdıiki tarihi de timestamp'a çevireceksin,
büyük olandan küçük olanı çıkartıp tekrar dd.mm.yyyy formatına çevireceksin.
dart için örnek yapabilir misin mübarek?
-
end bunu yazdı
iki tarihi de timestamp'a çevireceksin,
büyük olandan küçük olanı çıkartıp tekrar dd.mm.yyyy formatına çevireceksin.
Ama diyor ki 1 yıl 2 ay 25 gün şeklinde yazıyla yazsın. Bu üstte attığımı aynen istediği gibi çevirebilir.
-
herlocksholmes bunu yazdıend bunu yazdı
iki tarihi de timestamp'a çevireceksin,
büyük olandan küçük olanı çıkartıp tekrar dd.mm.yyyy formatına çevireceksin.
Ama diyor ki 1 yıl 2 ay 25 gün şeklinde yazıyla yazsın. Bu üstte attığımı aynen istediği gibi çevirebilir.
Tamam işte, Dakika cinsinden çıkan sayıyı 1yıl'a denk gelen Toplam Dakika'ya bölecek, çıkan sonucun(BÖLÜM'ün) sağ'ına 1boşluk koyup ve "YIL" ifadesi ekleyecek.
Aynı şekilde,
Bir üstteki işlemden KALAN sonucu, ortalama 1 aya tekabül eden Toplam Dakikaya bölecek, çıkan bölüme AY ifadesini ekleyecek.
aynı şekilde. Kalanı toplam dakikaya bölecek. tekrarlayacak.
yada böyle olması gerekir diye düşünüyorum. Modüler aritmetik değil mi, yada mod muydu neydi. ^^`
diyom birşey eksik. Artık yıl, 28(29)-30-31 dengesiz'liği ^^`
RitmFarbRacourci tarafından 22/Şub/20 18:32 tarihinde düzenlenmiştir -
hocam senin formüllerin dogru ama iki seyi gözden kacirmissin :)
Ilk olarak kalan günü hesaplarken toplam ayi cikarmissin ama toplam yili cikarmamissin. Yani aykalan söyle olmasi lazim
int aykalan = TotalGün - (ay * 30) - (yil * 365);
Bu sekilde calisiyor, peki ne kadar dogru? Cok dogru degil cünkü yine gözden kacirdigin sey, artik yil :) senin formülün her ayi 30 gün olarak kabul ediyor ve her yili da 365 gün kabul ediyor. O yüzden zaman farki büyüdükce dogruluk orani azaliyor.
O yüzden artik yili ve 30-31 günleri hesaba katan bir cözüme ihtiyacin var. Su sekil bir örnek var
https://stackoverflow.com/a/36410981/1022138
burada eleman artik yil (leap year) hesabini gözönünde bulundurarak yapmis. Denedim calisiyor.
Surdaki siteden de saglamasini yaptirabilirsin https://www.timeanddate.com/date/duration.html