tarih hesabı?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

tarih hesabı?

Mesaj gönderen y.kulac »

s.a.
arama kısmından tarih ile ilgili dökümanları buldum ve okudum. ama yapmak istediğimi beceremedim.

dbedit1 deki tarihi bu günün tarihinden çıkaracak ve edit1 e yılı edit2 ye ayı edit3 e ise günü yazacak.
ben bu günün tarinden dbedit1 de yazılan tarihi çıkarıp 365 e böldüm ama değişik bir rakam elde ettim.

neler önerirsiniz. iyi çalışmalar
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

Forumda bu konuda bir cok mesaj mevcut arama yaparsanız faydalanırsınız.


viewtopic.php?t=5470&highlight=iki+tarih

viewtopic.php?t=4290&highlight=param+tarih

iyi bayramlar
DotCom
Kıdemli Üye
Mesajlar: 1696
Kayıt: 11 Tem 2003 10:30
Konum: İzmir
İletişim:

Re: tarih hesabı?

Mesaj gönderen DotCom »

y.kulac yazdı:s.a.
arama kısmından tarih ile ilgili dökümanları buldum ve okudum. ama yapmak istediğimi beceremedim.

dbedit1 deki tarihi bu günün tarihinden çıkaracak ve edit1 e yılı edit2 ye ayı edit3 e ise günü yazacak.
ben bu günün tarinden dbedit1 de yazılan tarihi çıkarıp 365 e böldüm ama değişik bir rakam elde ettim.

neler önerirsiniz. iyi çalışmalar

Kod: Tümünü seç

var
yil, ay, gun, saat, dakika, saniye, salise : Word;
begin
DecodeDateTime ( Now, yil, ay, gun, saat, dakika, saniye, salise);
kolay gelsin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...

@abdulkadir
- Verdiği linklerde doğru sonuçlar malesef yok. Merak edip kontrol ettim. İlk linkteki @NeverFear'in veriği kod; @y.kulac'ın istediğine yakın bir işlem gerçekleştiriyor ama aşağıya o koddan yansıttığım örnek kadarından da görülen o ki bence hatalı... :!:
@NeverFear yazdı: ...
YIL:=YIL1 - YIL2;
AY:=AY1 - AY2;
if AY<0 then
begin
AY:=AY+12;
YIL:=YIL-1;
end;
GUN:=GUN1 - GUN2;
if GUN<0 then
begin
GUN:=GUN+30;
AY:=AY-1;
end;
if AY<0 then
begin
AY:=AY+12;
YIL:=YIL-1;
end;
...
- Hatası ay farkını alırken kullandığı sabiti 30 gün kabul etmesinden.

- Hepimiz biliyoruz ki bir yıl içerisinde, ay'daki gün sayısı 4 farklı sayıdır. 28, 29, 30, 31... Bu durumun önemi, 30.01.2004 ile 02.02.2004 gibi ardışık aylarda ön plana gelir... :idea:

- Temrin : Aşağıdaki işlemleri lütfen kağıt üzerinde deneyiniz...

- Yani
:!: 30.03.2004 -> 01.04.2004 arasında 2 gün'e karşılık 1 sonucu,
:!: 28.02.2004 -> 01.03.2004 arasında 2 gün'e karşılık 3 sonucu,
:!: 28.02.2005 -> 01.03.2005 arasında 1 gün'e karşılık 3 sonucu
vermesiyle hatalı işlem gerçekleştirmektedir...

- Tasarlayacağınız fonksiyonda bunlara dikkat ediniz... Vakit bulduğumda size kendi fonksiyonumu sunarım... :wink:
Resim
Resim ....Resim
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

@mrmcop hocam cevabın ve acıklamaların için tesekkür ederim

Maksadım arkadaşa,aradıgın burda demek degildi zaten algoritma örneklerine bakılırsa kişi neyi nasıl yapabilecini daha iyi anlar

forum içerisinde bu tur kodlar,soru ve örnekler mevcut
arama yap tavsiyesi corbanın tuzu.:)

iyi bayramlar.
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Mesaj gönderen y.kulac »

arkadaşlar teşekkür ederim. delphiyi sizlerin sayesinde öğrenmeye
çalışıyoruz. malesef bu işin eğitimini görmedim. ingilizcem de yok. ben bu işi boş zamanlarımı
değerlendirmek için yapıyorum. ilk önce sorunu halletmeye çalışıyorum. ben bir sorunun
üzerinde en az 3-4 saat kafa yormadan zaten foruma sormuyorum. arama da yapıyorum.
ama yapamıyorum. neyse yukarıdaki bilgilere göre tekraf uğraşayım. hepinize iyi çalışmalar.

bu arada kurban bayramınız mübarek olsun.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@abdulkadir hocam sana da iyi bayramlar..

- O kodu yazan sen değilsin ki, suçlar tarzda bişi yok, yazmak doğru olmazdı da zaten :oops:

- Tersine referans verdiğin için teşekkür borçluyuz, keza bu link gözden ırak kalmış, gün yüzüne çıkmasına vesile oldun... :o Desteğinin devamını dilerim... Resim

- Çalışmalarında başarılar... Resim
Resim
Resim ....Resim
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

aslında ben arkadaşa algoritma hazırlıyordum ama forumda vardır dedim kendim aradım buldum tavsiye ettim
arkadas işini göremesse bizde müsait olursak destegimiz insaallah sonsuzdur. elimizden geldigince.

allaha emanet olun.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Resim Gecenin bu saatinde sizlere bir bayram hediyesi olarak, değişken sayısınında tasarruf yapmaksızın, açıklamalarına da özen göstererek hazırladığım fonksiyonu sunuyorum... Resim

- Herkesin bayramını kutlarım...Resim

Not: IsLeapYear fonksiyonu için Uses'a DateUtils eklemeyi unutmayınız...

Kod: Tümünü seç

Function TarihFarki(Eski, Yeni:TDate) : String;
Var
  eGun, eAy, eYil,
  yGun, yAy, yYil : Word;
  sGun, sAy, sYil : Integer;
  EklenecekGun    : Word;
  T1, T2 : TDate;
begin
  EklenecekGun := 0;
  If Eski > Yeni then
  begin // Tarihler yanlışlıkla ters büyüklükte girilmiş demektir...
    T1 := Yeni;
    T2 := Eski;
  end else
  begin
    T1 := Eski;
    T2 := Yeni;
  end;
  DecodeDate(T1, eYil, eAy, eGun);
  DecodeDate(T2, yYil, yAy, yGun);
  sGun := yGun-eGun; // Sonuç negatif olursa;
  If sGun < 0 then   // eski ayın gün sayısı sonuca eklenecek
                     // yeni ayın, ay sayısından 1 düşülecek,
                     // fakat, 28,29,30,31 hangisi düşülecek, ona
                     // karar verilecek...
  begin
    Case eAy of      // dikkat: eski aya göre kontrol edip,
                     //         yeni aydan eksiltme yapmalıyız...
    1,3,5,7,8,10,12: // 31 çeken aylar
      EklenecekGun := 31;
    4,6,9,11: // 30 çeken aylar
      EklenecekGun := 30;
    2: // Şubat ayı 28 veya 29
      If IsLeapYear(eYil) // artık yıl kontrolü
        then EklenecekGun := 29
        else EklenecekGun := 28;
    end; // Case
    Repeat // Eklendiği halde negatiflik değişmeyebilir.
           // Örnek : 31.01.2005 -> 02.02.2005
      Inc(sGun, EklenecekGun);
      Dec(yAy);
    Until sGun >= 0; // sonuç 0 veya pozitif olana kadar...
  end;
  sAy := yAy-eAy; // Sonuç negatif olabilir
  While sAy < 0 do
  begin
    Inc(sAy, 12);
    Dec(yYil);
  end;
  sYil := yYil-eYil;
  Result := Format('%.4d.%.2d.%.2d',[sYil, sAy, sGun]);
end;
Resim
Resim ....Resim
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Mesaj gönderen y.kulac »

arkadaşlar hepizdn Allah razı olsun.
-mrmcop hocam similler harika :alkis:
Cevapla