none
daha önce aldığımız ileri zamanki bir tarihi örn 10.12.2015 şimdiki zamana göre şu kadar yıl şu kadar ay gün kalmış nasıl hesaplayabilirz RRS feed

  • Soru

  • merhabalar..
    daha önce aldığımız ileri zamanki bir tarihi örn 10.12.2015 şimdiki zamana göre şu kadar yıl şu kadar ay gün kalmış nasıl hesaplayabilirz
    4 Ekim 2012 Perşembe 08:58

Yanıtlar

  • Merhaba;

    Timespan kullanabilirsin. Örnek olması açısından;

    TimeSpan ts = DateTime.Now - Convert.ToDateTime("06.11.1988") ;
    label1.Text = (ts.Days/ 365).ToString();

    şu şekilde olabilir.

    Kolay gelsin.


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!

    4 Ekim 2012 Perşembe 09:07
  • Merhaba;

    Kusura bakmayın ben çok dikkatsizce düşünmeden cevap vermişim. Çetin Hocamın sonuna kadar hakkı var bu şekilde hesaplama karışacaktır.

    Doğrusu ya Çetin Bey'in önerdiği gibi ya da alternatif olarak alttaki gibi olmalıdır;

                DateTime eski = Convert.ToDateTime(textBox1.Text);
                TimeSpan ts = eski - DateTime.Now;
                int yil = ts.Days / 365;
                int ay = (ts.Days - yil*365)/30;
                int gun = ts.Days - ay * 30 - yil*365;
                label1.Text = yil.ToString() + " yıl, " + ay.ToString() + " ay, " + gun.ToString() + " gün";

    Yanlışım üzerine kusuruma bakmayın,

    İyi Çalışmalar.


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!

    4 Ekim 2012 Perşembe 10:51
  • Merhaba Okan Bey;

    Siz farkın sıfırdan küçük olup olmama durumunu kontrol ediyorsunuz öyleyse 0'a eşitliyorsunuz sanki fark yokmuş gibi. Bu şekilde doğru sonuç elde edemessiniz.

    Gelin birlikte bir örnek yapalım verdiğim 2 kodu da farklı butonların click eventine yazın (aşağıdaki gibi)

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    namespace Tarih_Fark
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                DateTime eski = Convert.ToDateTime(textBox1.Text);
                TimeSpan ts = eski - DateTime.Now;
                int yil = ts.Days / 365;
                int ay = (ts.Days - yil*365)/30;
                int gun = ts.Days - ay * 30 - yil*365;
                label1.Text = yil.ToString() + " yıl, " + ay.ToString() + " ay, " + gun.ToString() + " gün";
                
            }
            private void button2_Click(object sender, EventArgs e)
            {
                DateTime eski = Convert.ToDateTime(textBox1.Text);
                int yearDifference2 = (eski.Year) - (DateTime.Now.Year);
                int monthDifference2 = (eski.Month) - (DateTime.Now.Month);
                int dayDifference2 = (eski.Day) - (DateTime.Now.Day);
                string dateDifference2 = yearDifference2 + " yıl, " + monthDifference2 + " ay, " + dayDifference2 + " ,gün";
                label2.Text = dateDifference2;
            }
        }
    }

    ve Çetin Bey'in de bahsettiği gibi ay ve gün'ü bu günden daha küçük olan bir gün girin ("1.1.2015") iki sonuç da birbirinden farklı çıkacaktır ve doğrusu "2 yıl, 2 ay, 28 gün" olmalıdır.

    Size verdiğim ilk kod hatalı, ikinci verdiğimi ya da Çetin Bey'i önerdiği kodu kullanmanızı tavsiye ederim. Çünkü ilkinde yaptığım birbirinden bağımsız olarak aydan ayı, günden günü, yıldan yılı çıkarmaktı ki bu oldukça hatalı bir mantıktı. Diğerinde ise TimeSpan kullanarak "Days" properties ile aradaki toplam gün sayısı bulunarak sırasıyla önce 365'e sonra kalan 30'a en son da son kalan değer olmak üzere yıl gün ay olarak sıralanmış oldu.

    Umarım açıklayabilmişimdir.


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!

    4 Ekim 2012 Perşembe 11:21
  • Sonuc alamadim derken demek istedigin o sureyi yil/ay/gun olarak mi almak? Oyleyse:

    void Main()
    {
      dynamic sure = CalcTarihFark(DateTime.Today, new DateTime(2013,12,30) );
      Console.WriteLine ("Yil:{0}, Ay:{1}, Gun:{2}",sure.Yil, sure.Ay, sure.Gun);
    }
    
    private dynamic CalcTarihFark(DateTime t1, DateTime t2)
    {
      int y=0,m=0,d=0;
      while (t1.AddYears(y) <= t2) { y++; }
      y--;
      while (t1.AddYears(y).AddMonths( m ) <= t2) { m++; }
      m--;
      d = (t2 - t1.AddYears(y).AddMonths( m )).Days;
    
      dynamic yag = new ExpandoObject();
      yag.Yil = y;
      yag.Ay = m;
      yag.Gun = d;
      return yag;
    }
    Hata kontrolu yok. Kucuk tarih ilk parametre.
    4 Ekim 2012 Perşembe 10:03
    Yanıtlayıcı

Tüm Yanıtlar

  • Merhaba;

    Timespan kullanabilirsin. Örnek olması açısından;

    TimeSpan ts = DateTime.Now - Convert.ToDateTime("06.11.1988") ;
    label1.Text = (ts.Days/ 365).ToString();

    şu şekilde olabilir.

    Kolay gelsin.


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!

    4 Ekim 2012 Perşembe 09:07
  • ileri bir tarihten datetime.now ı  çıkartıcam ve ayrı ayrı labellere şukadar yıl şukadr ay şukadr gün kaldı yazdıracağım.. yazdığınız koda benzer birşeyler denemiştim ama çok sağlıklı sonuç alamadım
    4 Ekim 2012 Perşembe 09:11
  • Tekrar Merhaba;

    Şu şekilde de çözebilirsiniz. Sanırım sizin isteğinizi tam olarak yerine getirecektir bu kod parçası;

                DateTime eski = Convert.ToDateTime(textBox1.Text);
                int yearDifference = (eski.Year) - (DateTime.Now.Year);
                int monthDifference = (eski.Month) - (DateTime.Now.Month);
                int dayDifference = (eski.Day) - (DateTime.Now.Day);
                string dateDifference = yearDifference + " yıl, " + monthDifference + " ay, " + dayDifference + " ,gün";
                label.Text = dateDifference2;

    Ben burada "daha önce belirlediğim" dediğiniz tarihi textbox üzerinden kendim girip, DateTime'a çevirdim. Siz de kayıtlı olan verinizi çekerek kullanabilirsiniz.

    İyi çalışmalar.


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!


    4 Ekim 2012 Perşembe 09:40
  • Tekrar Merhaba;

    Şu şekilde de çözebilirsiniz. Sanırım sizin isteğinizi tam olarak yerine getirecektir bu kod parçası;

                DateTime eski = Convert.ToDateTime(textBox1.Text);
                int yearDifference = (eski.Year) - (DateTime.Now.Year);
                int monthDifference = (eski.Month) - (DateTime.Now.Month);
                int dayDifference = (eski.Day) - (DateTime.Now.Day);
                string dateDifference = yearDifference + " yıl, " + monthDifference + " ay, " + dayDifference + " ,gün";
                label.Text = dateDifference2;

    Ben burada "daha önce belirlediğim" dediğiniz tarihi textbox üzerinden kendim girip, DateTime'a çevirdim. Siz de kayıtlı olan verinizi çekerek kullanabilirsiniz.

    İyi çalışmalar.


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!


    budur !! başka birşey demiyorum..  saolun :)
    4 Ekim 2012 Perşembe 10:00
  • Sonuc alamadim derken demek istedigin o sureyi yil/ay/gun olarak mi almak? Oyleyse:

    void Main()
    {
      dynamic sure = CalcTarihFark(DateTime.Today, new DateTime(2013,12,30) );
      Console.WriteLine ("Yil:{0}, Ay:{1}, Gun:{2}",sure.Yil, sure.Ay, sure.Gun);
    }
    
    private dynamic CalcTarihFark(DateTime t1, DateTime t2)
    {
      int y=0,m=0,d=0;
      while (t1.AddYears(y) <= t2) { y++; }
      y--;
      while (t1.AddYears(y).AddMonths( m ) <= t2) { m++; }
      m--;
      d = (t2 - t1.AddYears(y).AddMonths( m )).Days;
    
      dynamic yag = new ExpandoObject();
      yag.Yil = y;
      yag.Ay = m;
      yag.Gun = d;
      return yag;
    }
    Hata kontrolu yok. Kucuk tarih ilk parametre.
    4 Ekim 2012 Perşembe 10:03
    Yanıtlayıcı
  • Saygisizlik etmek istemem ama ya ben yanlis anliyorum ya da bu gercekten hatali sonuc verir. Ornegin DateTime( 2012, 12, 31 ) ise ne almayi bekliyoruz, ya da (2013, 1, 1) ise.
    4 Ekim 2012 Perşembe 10:09
    Yanıtlayıcı
  •  DateTime eski = Convert.ToDateTime(txthostbittar.Text);
                    int yearDifference2 = (eski.Year) - (DateTime.Now.Year);
                    if (yearDifference2 <= 0) yearDifference2 = 0;
                    int monthDifference2 = (eski.Month) - (DateTime.Now.Month);
                    if (monthDifference2 <= 0) monthDifference2 = 0;
                    int dayDifference2 = (eski.Day) - (DateTime.Now.Day);
                    if (dayDifference2 <= 0) dayDifference2 = 0;
                    string dateDifference2 = yearDifference2 + " yıl, " + monthDifference2 + " ay, " + dayDifference2 + " ,gün kaldı";
                    lblkalan.Text = dateDifference2;

    Ali Rıza bey'in koduna az bi ek yaptım tam istediğim sonucu aldım.. yardımcı olan tüm arkadaşlara teşekkürler

    4 Ekim 2012 Perşembe 10:17
  • Merhaba;

    Kusura bakmayın ben çok dikkatsizce düşünmeden cevap vermişim. Çetin Hocamın sonuna kadar hakkı var bu şekilde hesaplama karışacaktır.

    Doğrusu ya Çetin Bey'in önerdiği gibi ya da alternatif olarak alttaki gibi olmalıdır;

                DateTime eski = Convert.ToDateTime(textBox1.Text);
                TimeSpan ts = eski - DateTime.Now;
                int yil = ts.Days / 365;
                int ay = (ts.Days - yil*365)/30;
                int gun = ts.Days - ay * 30 - yil*365;
                label1.Text = yil.ToString() + " yıl, " + ay.ToString() + " ay, " + gun.ToString() + " gün";

    Yanlışım üzerine kusuruma bakmayın,

    İyi Çalışmalar.


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!

    4 Ekim 2012 Perşembe 10:51
  • Merhaba;

    Kusura bakmayın ben çok dikkatsizce düşünmeden cevap vermişim. Çetin Hocamın sonuna kadar hakkı var bu şekilde hesaplama karışacaktır.

    Doğrusu ya Çetin Bey'in önerdiği gibi ya da alternatif olarak alttaki gibi olmalıdır;

                DateTime eski = Convert.ToDateTime(textBox1.Text);
                TimeSpan ts = eski - DateTime.Now;
                int yil = ts.Days / 365;
                int ay = (ts.Days - yil*365)/30;
                int gun = ts.Days - ay * 30 - yil*365;
                label1.Text = yil.ToString() + " yıl, " + ay.ToString() + " ay, " + gun.ToString() + " gün";

    Yanlışım üzerine kusuruma bakmayın,

    İyi Çalışmalar.


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!

    Ali Rıza Bey;

     DateTime eski = Convert.ToDateTime(txthostbittar.Text);
                    int yearDifference2 = (eski.Year) - (DateTime.Now.Year);
                    if (yearDifference2 <= 0) yearDifference2 = 0;
                    int monthDifference2 = (eski.Month) - (DateTime.Now.Month);
                    if (monthDifference2 <= 0) monthDifference2 = 0;
                    int dayDifference2 = (eski.Day) - (DateTime.Now.Day);
                    if (dayDifference2 <= 0) dayDifference2 = 0;
                    string dateDifference2 = yearDifference2 + " yıl, " + monthDifference2 + " ay, " + dayDifference2 + " ,gün kaldı";
                    lblkalan.Text = dateDifference2;

    sizin kodlarınıza sadece bir kaç if kontrolü koydum ve sıkıntı olmadan doğru sonuç veriyor.. yanlış birşey yapıyor olabilirmyim

    4 Ekim 2012 Perşembe 11:05
  • Merhaba Okan Bey;

    Siz farkın sıfırdan küçük olup olmama durumunu kontrol ediyorsunuz öyleyse 0'a eşitliyorsunuz sanki fark yokmuş gibi. Bu şekilde doğru sonuç elde edemessiniz.

    Gelin birlikte bir örnek yapalım verdiğim 2 kodu da farklı butonların click eventine yazın (aşağıdaki gibi)

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    namespace Tarih_Fark
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                DateTime eski = Convert.ToDateTime(textBox1.Text);
                TimeSpan ts = eski - DateTime.Now;
                int yil = ts.Days / 365;
                int ay = (ts.Days - yil*365)/30;
                int gun = ts.Days - ay * 30 - yil*365;
                label1.Text = yil.ToString() + " yıl, " + ay.ToString() + " ay, " + gun.ToString() + " gün";
                
            }
            private void button2_Click(object sender, EventArgs e)
            {
                DateTime eski = Convert.ToDateTime(textBox1.Text);
                int yearDifference2 = (eski.Year) - (DateTime.Now.Year);
                int monthDifference2 = (eski.Month) - (DateTime.Now.Month);
                int dayDifference2 = (eski.Day) - (DateTime.Now.Day);
                string dateDifference2 = yearDifference2 + " yıl, " + monthDifference2 + " ay, " + dayDifference2 + " ,gün";
                label2.Text = dateDifference2;
            }
        }
    }

    ve Çetin Bey'in de bahsettiği gibi ay ve gün'ü bu günden daha küçük olan bir gün girin ("1.1.2015") iki sonuç da birbirinden farklı çıkacaktır ve doğrusu "2 yıl, 2 ay, 28 gün" olmalıdır.

    Size verdiğim ilk kod hatalı, ikinci verdiğimi ya da Çetin Bey'i önerdiği kodu kullanmanızı tavsiye ederim. Çünkü ilkinde yaptığım birbirinden bağımsız olarak aydan ayı, günden günü, yıldan yılı çıkarmaktı ki bu oldukça hatalı bir mantıktı. Diğerinde ise TimeSpan kullanarak "Days" properties ile aradaki toplam gün sayısı bulunarak sırasıyla önce 365'e sonra kalan 30'a en son da son kalan değer olmak üzere yıl gün ay olarak sıralanmış oldu.

    Umarım açıklayabilmişimdir.


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!

    4 Ekim 2012 Perşembe 11:21
  • kesinlikle haklısınız..  amatörlük işte bu yüzden junior developer kademesindeyim :) fark oldukça net... ilginiz için teşekkürlerimi sunarım siz değerli Senior'lara....
    4 Ekim 2012 Perşembe 11:52
  • https://social.msdn.microsoft.com/Forums/tr-TR/23e3c5cc-620a-4c4d-bdae-5a7885fe025f/ltfen-yardimci-olurmusunuz?forum=csharptr

    Bu konuda yardımcı olabilirmisiniz

    3 Nisan 2016 Pazar 07:30