1 ay içindeki cumartesi ve pazarları bulma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

1 ay içindeki cumartesi ve pazarları bulma

Mesaj gönderen erdogan_ozkaya »

arkadaşlar,

1 ay'ı 1.2.3.4....31 die düşünün
bir kod olsun ki, bana

Pazar Günü 1-8-15-22-29 not: örnek mart 2015
Cumartesi Günü 7-14-21-28 not: örnek mart 2015

diyebilen bir kod nasıl yapabilirim ?

yapmak istediğim puantaj hazırlarken cumartesi ve pazar mesailerini ayrı bir tabloya işlemek

2. sorum
aşağıdaki tabloyu hazırlıyorum (EhLib.v5.6.215 ) bilgileri çekiyorum bir sıkıntı yok ama editledikten sonra işlemiyor nasıl yapabilirim ?
Resim
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Re: 1 ay içindeki cumartesi ve pazarları bulma

Mesaj gönderen true_false »

http://www.delphibasics.co.uk/ByFunctio ... esAndTimes

The DayOfWeek function returns an index number for the day of the week :
1 = Sunday
2 = Monday
3 = Tuesday
4 = Wednesday
5 = Thursday
6 = Friday
7 = Saturday


uses kısmına DateUtils eklemeyi unutma.
type
Tform1 = class(Tform)
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: 1 ay içindeki cumartesi ve pazarları bulma

Mesaj gönderen erdogan_ozkaya »

birşey anlamadım valla :)) örnek bir kod var mı ?
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: 1 ay içindeki cumartesi ve pazarları bulma

Mesaj gönderen erdogan_ozkaya »

var
myDate : TDateTime;
day : string;

begin
myDate := EncodeDate(2002, 12, 31);

day := LongDayNames[DayOfWeek(myDate)];

ShowMessage('Christmas day 2002 is on a '+day);
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: 1 ay içindeki cumartesi ve pazarları bulma

Mesaj gönderen erdogan_ozkaya »

hocam yapmak istediğim hafta içini kayıt yaparken bir tabloya hafta sonunu kayıt yaparken bir tabloya girmek istiyorum. nasıl yapmalıyım ?


HAFTAİÇİ
HAFTASONU_CUMARTESİ
HAFTASONU_PAZAR
RESMİ_TATİL
BAYRAM_MESAİSİ
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Re: 1 ay içindeki cumartesi ve pazarları bulma

Mesaj gönderen true_false »

kayıt yaptığın tarihi dayofweek metoduna gönder metoddan dönen retrun değeri 1 ise pazar 7 ise c.tesidir. yani:

Kod: Tümünü seç

uses .....,Dateutils;

....
.
begin
  case DayOfTheWeek(now) of
  1: ShowMessage('Bugün bugün pazardır..');
  7:ShowMessage('Bugün c.tesidir..');
  else ShowMessage('haftaiçidir.');
  end;

end;
yukarıdaki kod case bloklarındaki ayrımla ve gönderdiğin tarihle(now) istediğin hafta içi ve haftasonuayrımını yapıyor lakin. İşin içine resmi,dini tatil girdimi işin rengi değişiyor. Delphide her ülkeye özgü bayramları algılayacak hazır bir metod yok. Bu senin kuracağın yapıyla alakalı. Bir tablo içerisine şimdiye kadar ve sonra oluşacak resmi ve dini bayramları gir (http://www.takvim.com/resmi_tatiller.php) ve o tablondan sorgulama yap.
type
Tform1 = class(Tform)
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: 1 ay içindeki cumartesi ve pazarları bulma

Mesaj gönderen erdogan_ozkaya »

hocam hapmak istediğim

cumartesi günlerini bulucam 1'den 31'e kadar olan neslerden, örnek 7-21-28 vs. gün cumartesi ise 7. 21. ve 28. nesneler hariç diğerlerini gizleyecek aynı işlem pazar günü içinde yapmak istiyorum

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

Re: 1 ay içindeki cumartesi ve pazarları bulma

Mesaj gönderen mrmarman »

Sana bir fonksiyon hazırladım. Deneyip kendine göre geliştirirsin. Maksat mantığı anlaman.
fonksiyonların başına DateUtils koydum ki hangi fonksiyonların bu unitten destek aldığını görebilesiniz. Dilerseniz DateUtils'li ön takıları kaldırabilirsiniz bunu biliyorsunuz zaten.

Kod: Tümünü seç

USES DateUtils;

Function HaftaSonuGunler( dtTarih : TDate; boolCts, boolPaz : Boolean ) : String;
Var
  dtTar : TDate;
begin
  Result := '';
  dtTar := INT( DateUtils.StartOfTheMonth( dtTarih ) );
  while dtTar <= INT ( DateUtils.EndOfTheMonth( dtTarih ) ) do
  begin
    case DayOfWeek( dtTar ) of
    1: if boolPaz then Result := Result + IntToStr( DateUtils.DayOf(dtTar) ) + ',';
    7: if boolCts then Result := Result + IntToStr( DateUtils.DayOf(dtTar) ) + ',';
    end;
    dtTar := DateUtils.IncDay( dtTar );
  end;
  if Result <> '' then System.Delete( Result, Length(Result), 1 );
end;
Kullanımı ise şöyle
boolCts ve/veya boolPaz TRUE ise o haftanın gününe ait günleri referans tarihteki ay içerisinden bulup gösterir.

Döngüyü StartOfTheMonth ile değil de seçili tarihten başlatırsan ilgili tarihten sona kadar olan tarih için çalışır. Bu örnek tüm ayı değerlendiriyor.

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  ShowMessage( HaftaSonuGunler(DateTimePicker1.Date, True, False ) ); // Sadece Cumartesi Günleri
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  ShowMessage( HaftaSonuGunler(DateTimePicker1.Date, False, True ) ); // Sadece Pazar Günşleri
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  ShowMessage( HaftaSonuGunler(DateTimePicker1.Date, True, True ) ); // Tüm hafta sonu olanlar (Cumartesi ve Pazar birlikte)
end;

Resim
Resim ....Resim
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Re: 1 ay içindeki cumartesi ve pazarları bulma

Mesaj gönderen true_false »

Kod: Tümünü seç


procedure TForm1.Button2Click(Sender: TObject);
var
 son,bas :TDate;
 dateKont : Boolean;
 i:integer;

begin
  i:= 0;
  dateKont := False;
  son := EndOfTheMonth(now);
 // ShowMessage(DateToStr(hh));
  bas := EncodeDate(2015,3,01);
  while not dateKont do
  begin
    if DayOfWeek(bas) = 1 then
    dateKont := True else
    bas := bas +1;
  end;
  // ayın ilk pazarını bulduk şimdi ayın pazarları ve son pazarı bulunacak..
  inc(i);
  ListBox1.Items.Add('2015 Mart Ayının  '+ IntToStr(i)+ '. pazarı ' +DateToStr(bas));
  dateKont := False;
  while not dateKont do
  begin
     if bas+7 >  son then
     dateKont := true else
     begin
       inc(i);
       bas := bas + 7;
       ListBox1.Items.Add('2015 Mart Ayının  '+ IntToStr(i)+ '. pazarı ' +DateToStr(bas))
     end;
  end;
end;
ListBox koy dene.
type
Tform1 = class(Tform)
Cevapla